PHP 네 이 티 브 함수 가 좋 을까요?
3036 단어 PHP 원생 함수
/**
* 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 커 널 에서 이 함수 의 복잡 도 에 대해 서도 잘 알 고 있 기 때문에 이 작은 최적화 가 이렇게 잘 할 수 있 습 니 다.정말 대단 합 니 다!!