개발개발/PHP

[싼팁] strtotime() 함수 속도 향상 방법.

꾸냥 2011. 8. 24. 23:57
알고리즘이라고 하긴 부끄러운 이야기라 그냥 싼팁

최근 작업물에서 [yyyy-mm-dd H:i:s] 형식의 시간을 초로 변경하는 작업을 하였다.
한번 프로세스가 돌때 평균 데이터는 3만개 내외였고 strtotime 을 사용해서 unixtime으로 변경하였다.

[strtotime 사용해서 변경]
running time : 2.9425239562988
running time : 1.7970490455627
running time : 1.7902619838715
running time : 1.7941279411316
running time : 1.7920358181

평균 : 2.0231951713562

사실 이것의 속도를 향상시키기 위해 문자를 일일히 쪼개서 mktime 으로 변경을 해봤다. 여전히 속도는 별반 차이 없음.

그러다 최근에 [생각하는 프로그래밍] 이라는 책을 읽으면서 대부분 동일한 일자의 데이터인데 굳이 매번 strtotime 을 사용할 필요없이 해당 날짜에 하나만 사용하고 나머지는 뒷 시간들만 계산해서 처리하면 어떨까? 라는 생각이 들었다.

[테스트 코드]
$avg = 0;
for ($j = 0; $j < 5; $j++) {
	$start = microtime(true);
	$date = '2010-06-27 07:45:48';
	for ($i = 0; $i < 30000; $i++) {
		$dateInfo = explode(' ', $date);
		$dateInfoTime = explode(':', $dateInfo[1]);
		$mktime = $dateInfoTime[0] * 3600 + $dateInfoTime[1] * 60 + $dateInfoTime[2];
	}
	$avg += (microtime(true) - $start);
	echo "running time : ".(microtime(true) - $start).chr(10).'
'; } echo 'average : '.($avg / 5).chr(10).'<br />';
날짜 형식은 동일함으로 시간만 구분자로 나눠주고 따로 계산을 함

[결과]
running time : 0.12191700935364
running time : 0.11899185180664
running time : 0.12031984329224
running time : 0.11860013008118
running time : 0.17708086967468

평균 : 0.13137860298157

[마무리]
상당한 속도의 차이가 보인다. 계산할 필요가 없는 부분까지 계산을 함으로 속도 저하가 발생하였는데 그 부분을 제거함으로써 나름 만족스러운 속도를 보였다.
역시 사람은 계속 공부해야되...
반응형