일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Codeigniter
- XPS15
- 고해상도
- ami
- 델코리아
- 어도비
- 월회고
- X보이스
- SENTRY
- 디-버그
- X라소프트
- 국가번호목록 #전화번호국가코드 #퇴근을원합니다
- Dell
- 개발기록
- php
- 포토샵
- aws
- 포토샵 고해상도
- 일러스트 고해상도
- 네오커머스
- laravel
- codeigniter3
- monolog
- xps15 9550
- 일러스트
- 팬마음
- 디버그
- ENA
- xps
- Today
- Total
Good Day
[PHP7] foreach와 while(list()=each()) 간단 성능비교 본문
※ 주의1: 별다른 생각 없이 개발하면서 적는 부분이므로 절대 네버 에버 절대치는 아닙니다.
※ 주의2: 올바른 테스트 방법이 아닐 수 있으므로 의견 제시해주시면 참고하겠습니다.
Fanmaum팀에서 작업하다가 엑심베이에서 뭘 덜해줬는지 Alipay가 짤리는 바람에
Alipay를 오리지널로 붙히는 작업을 하게 되었다.
작업 도중에 예전에는 쓰다가 안쓰게된, 반복문 관련해서 차이가 있나 싶은 코드를 발견해서 간단하게 테스트 했다.
- 환경: AWS t2.micro / nginx 1.4 / php7.0.12
- 조건: 작성중인 php 클래스 내에 함수 두개 생성 후 각각 10만번(100,000) 호출을 20회 진행
- 테스트 코드 1 - AlipayUtil Class 내에 함수 두개
class AlipayUtil { /** * 배열을 Query string(&key=value)으로 변환한다. * @param $para 합칠 매개변수 배열 * return 완성된 query string 문자열 */ public function createLinkstring($para) { $arg = ""; while (list ($key, $val) = each ($para)) { $arg.=$key."=".$val."&"; } //마지막 &을 제거 //$arg = substr($arg,0,count($arg)-2); //자동 이스케이프가 켜져있으면 slash를 정리해준다. //if(get_magic_quotes_gpc()){$arg = stripslashes($arg);} return $arg; } /** * 배열을 Query string(&key=value)으로 변환한다. * @param $para 합칠 매개변수 배열 * return 완성된 query string 문자열 */ public function createLinkstringForeach($para) { $arg = ""; foreach( $para as $key => $val ){ $arg.=$key."=".$val."&"; } //마지막 &을 제거 //$arg = substr($arg,0,count($arg)-2); //자동 이스케이프가 켜져있으면 slash를 정리해준다. //if(get_magic_quotes_gpc()){$arg = stripslashes($arg);} return $arg; } (이하 생략)
- 테스트 코드 2 - 테스트 실행코드
$util = new AlipayUtil(); $params = [ 'partner' => '2088101122136241', 'key' => '760bdzec6y9goq7ctyx96ezkz78287de', 'notify_url' => 'aaaaaa', 'return_url' => 'as65d41q98w4d89', 'cacert' => getcwd().'/cacert.pem', ]; $start_time = microtime(true); for ($i=0; $i < 100000; $i++) { $e = $util->createLinkstring($params); unset($e); } $end_time = microtime(true); echo 'original_runtime: '.($end_time-$start_time).'<br/>'; $start_time = microtime(true); for ($i=0; $i < 100000; $i++) { $e = $util->createLinkstringForeach($params); unset($e); } $end_time = microtime(true); echo 'foreach_runtime: '.($end_time-$start_time).'<br/>';
1회차
original_runtime: 0.18685507774353
foreach_runtime: 0.064045906066895
2회차
original_runtime: 0.21014499664307
foreach_runtime: 0.064871072769165
3회차
original_runtime: 0.18757891654968
foreach_runtime: 0.064393997192383
4회차
original_runtime: 0.18810296058655
foreach_runtime: 0.064836978912354
5회차
original_runtime: 0.18863606452942
foreach_runtime: 0.064652919769287
6회차
original_runtime: 0.18769288063049
foreach_runtime: 0.064851999282837
7회차
original_runtime: 0.1881890296936
foreach_runtime: 0.063837766647339
8회차
original_runtime: 0.18890118598938
foreach_runtime: 0.064695119857788
9회차
original_runtime: 0.18895411491394
foreach_runtime: 0.065633058547974
10회차
original_runtime: 0.19127202033997
foreach_runtime: 0.06474494934082
테스트 결과 foreach 승리
'개발 > PHP' 카테고리의 다른 글
[Codeigniter] Monolog를 사용해보자 (0) | 2018.05.28 |
---|---|
[Codeigniter With Sentry] Sentry 붙이기 - 1. 코어 클래스 교체버전 (0) | 2016.12.29 |
[PHP7] REQUEST 값 가져올때 클래스 내에 static 선언한 것과 안한 함수의 속도 비교 (0) | 2016.10.28 |