영원한사랑

//////////// 첫번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str = $str.$i."번째 문자열<br>";
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



//////////// 두번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str = $str.($i."번째 문자열<br>");
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



//////////// 세번째 방법
$t1 =  explode(" ",microtime());
$str = "";
for ($i=0;$i<20000;$i++) {
    $str .= $i."번째 문자열<br>";
}
$t2 =  explode(" ",microtime());
echo ($t2[1]-$t1[1])+($t2[0]-$t1[0]);



결과 :
첫번째 방법 -> 5초 ~ 10초 이상 속도가 걸림
두번째 방법 -> 0.5초 이하로 빠름
세번째 방법 -> 0.5초 이하로 빠름


문자열 더할 때 절대 첫번째 방법 사용하지 맙시다!

근데 확실히 PHP가 빠르긴 빠르네요.
ASP로 for 구문 20000번 돌렸을 때
첫번째 방법은 대략 13~15초
두번째 방법은 대략 6~7초 나오는데 -_-


첫번째 방법과 두번째 방법은 단순히 괄호를 하냐 안하냐의 차이인데
이렇게 속도 차이가 나는 이유는
http://www.microsoft.com/korea/msdn/library/etc/issues/2003/aspstrcatn/
여기가서 확인하세요.

펌:뭉충닷컴





흔히 string buffer 라고 하는 방법을 추가해서 테스트 해봤는데, 그래도 .= 가 더 빠르네요.

PHP5 를 쉘에서 실행하느라 코드가 다음과 같았습니다.
$t1 = microtime(true);
$str = '';
$arr = array();
for ($i=0;$i<$times;$i++) {
        $arr[] = $i."번째 문자열<br>";
}
$str = join('', $arr);
$t2 = microtime(true);
echo ($t2-$t1);
echo "\n";

1~3번째 방법도 동일하게 다시 테스트해봤는데, 8000번 반복에

8.85153102875
4.30858206749
0.0193250179291
0.032870054245

이렇게 나타나네요. ^^

펌:행복한고니