PHP 네 이 티 브 함수 가 좋 을까요?

3036 단어 PHP 원생 함수
오늘 kohana 소스 코드 의 Arr 류 를 읽 으 면서 이런 함 수 를 발 견 했 습 니 다.

 /**
  * Fill an array with a range of numbers.
  *
  *     // Fill an array with values 5, 10, 15, 20
  *     $values = Arr::range(5, 20);
  *
  * @param   integer $step   stepping
  * @param   integer $max    ending number
  * @return  array
  */
 public static function range($step = 10, $max = 100)
 {
  if ($step < 1)
   return array();

  $array = array();
  for ($i = $step; $i <= $max; $i += $step)
  {
   $array[$i] = $i;
  }

  return $array;
 }
 

    이곳 을 보 았 을 때 나 는 phop 의 원생 함수 도 이 기능 을 실현 할 수 있다 는 것 을 알 게 되 었 다.갑자기 전에 들 은 한 선배 가 phop 성능 최적화 에 관 한 설 인 PHP 가 우리 에 게 그렇게 많은 원생 함 수 를 제공 해 주 었 는데 우 리 는 가능 한 한 원생 함수 로 문 제 를 해결 하려 고 한다.그래서 나 는 phop 원생 함수 의 성능 이 자신 이 쓴 것 보다 얼마나 빠 른 지 테스트 를 했다.테스트 할 함 수 는 원생 함수 range()와 위의 함수range(),여기에 밑줄 을 친 것 은 원생 함수 range()를 다시 쓰 면'Fatal error:Cannot redeclare range()in'을 잘못 알 릴 수 있 기 때 문 입 니 다.
 
 function _range($step = 10, $max = 100)
 {
  if ($step < 1)
   return array();
  $array = array();
  for ($i = $step; $i <= $max; $i += $step)
  {
   $array[$i] = $i;
  }
  return $array;
 }
 $time['begin'] = microtime(true);
 $tmp = range(0,1000000,3);
 //$tmp = _range(0,1000000,3);
 $time['end']   = microtime(true);
 echo $time['end'] - $time['begin'].'s'."\r";
 echo (memory_get_peak_usage()/1024/1024)."M";
    각각 원생 함수 와 사용자 정의 함수 로 테스트 를 진행 하 였 는데,0~1000000 사이 의 모든 3 의 배수 가 생 겼 을 때,결 과 는 나의 예상 을 벗 어 났 다.
우선 원생 함 수 를 사용 한 결과:
 
다음은 사용자 정의 함 수 를 사용 한 결과 입 니 다.
 
결과 가 비교적 정확 하기 위해 서 나 는 도표 통 계 를 만 들 고 있다.
횟수 를 집계 하 다 원생 함수 range() 사용자 정의 함수range()
(0,1000000,3) 5.155E-3s 27.5530M 1.907E-5s 0.1241M
(0,1000000,2) 7.479E-3s 40.2688M 1.811E-5s 0.1241M
(0,1000,1) 8.16E-5s 0.1620M 2.649E-5s 0.1241M
    표 에서 알 수 있 듯 이 난수 가 생 겼 을 때 사용자 정의 함 수 는 원생 함수 보다 메모리 와 시간 을 절약 할 수 있 습 니 다.또한 원생 함 수 는 대량의 난수 가 생 성 될 때 특히 메모 리 를 소모 하고 시간 도 많이 소모 합 니 다.사용자 정의 함 수 는 이 방면 에서 잘 표현 되 었 습 니 다.발생 하 는 메모리 와 소모 하 는 시간 이 대체적으로 안정 적 입 니 다.앞에서 그 선배 가 말 한 것 이 꼭 정확 한 것 은 아 닙 니 다.하지만 여기 서 사용자 정의 함 수 는 숫자 만 생 성 할 수 있 고 네 이 티 브 range 는 알파벳 도 생 성 할 수 있 습 니 다.하지만 이 사용자 정의 함수 에 알파벳 을 추가 하 는 것 도 어렵 지 않 을 것 이 라 고 생각 합 니 다.
    보아하니 kohana 공식 은 range 라 는 함수 에 대해 잘 알 고 있 는 것 같 습 니 다.phop 커 널 에서 이 함수 의 복잡 도 에 대해 서도 잘 알 고 있 기 때문에 이 작은 최적화 가 이렇게 잘 할 수 있 습 니 다.정말 대단 합 니 다!!

좋은 웹페이지 즐겨찾기