2009-11-28 3 views
4

사이에 속도 차이가 있습니까 :

$ newstring = "$ a 및 $ b가 $ c를보기 위해 나갔습니다.";

$ newstring = $ a. "and". $ b. "보러 나갔다". $ c;

만약 그렇다면 왜? (그러나 아마의 차이는 약간 큰 것

$newstring = $a . ' and ' . $b . ' went out to see ' . $c; 

:

답변

16

는 PHP 버전에을 따라, 두 번째는 빠른 얼마나 많은에 따라 다릅니다 : $newstring = $a . ' and ' . $b . ' went out to see ' . $c;

PHP입니다 매우 일치하지 않는 버전의 버전과이 오면 구축 구축 성능에 이르기 위해서는 직접 테스트해야합니다. 아래에서 볼 수 있듯이 $a, $b$c 유형에 따라 달라집니다.

"을 사용하면 PHP는 문자열을 분석하여 그 안에 사용 된 변수/자리 표시자가 있는지 확인하지만 ' 만 사용하면 PHP는 더 이상 처리하지 않고 간단한 문자열로 처리합니다. 그래서 일반적으로 '가 빠릅니다. 적어도 이론적으로는. 실제로 테스트해야합니다. (초)


결과 :

a, b, c are integers: 
all inside "  : 1.2370789051056 
split up using " : 1.2362520694733 
split up using ' : 1.2344131469727 

a, b, c are strings: 
all inside "  : 0.67671513557434 
split up using " : 0.7719099521637 
split up using ' : 0.78600907325745 <--- this is always the slowest in the group. PHP, 'nough said 

젠드 서버 CE PHP이 코드 5.3 사용 : 그것은 두 개의 서로 다른 구문을 이후,

<?php 

echo 'a, b, c are integers:<br />'; 
$a = $b = $c = 123; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = "$a and $b went out to see $c"; 
$t = xdebug_time_index() - $t; 
echo 'all inside " : ', $t, '<br />'; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = $a . " and " . $b . " went out to see " . $c; 
$t = xdebug_time_index() - $t; 
echo 'split up using " : ', $t, '<br />'; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c; 
$t = xdebug_time_index() - $t; 
echo 'split up using \' : ', $t, '<br /><br />a, b, c are strings:<br />'; 

$a = $b = $c = '123'; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = "$a and $b went out to see $c"; 
$t = xdebug_time_index() - $t; 
echo 'all inside " : ', $t, '<br />'; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = $a . " and " . $b . " went out to see " . $c; 
$t = xdebug_time_index() - $t; 
echo 'split up using " : ', $t, '<br />'; 

$t = xdebug_time_index(); 
for($i = 1000000; $i > 0; $i--) 
    $newstring = $a . ' and ' . $b . ' went out to see ' . $c; 
$t = xdebug_time_index() - $t; 
echo 'split up using \' : ', $t, '<br />'; 

?> 
1

가 예, 그러나 차이는

$newstring = "$a and $b went out to see $c"; 

$newstring = $a . " and " . $b . " went out to see " . $c; 

사용한 경우와 매우 무시할 여전히 무시할 수 있음), 이것에 대한 이유는, 내가 올바르게 기억한다면 (나는 이것에 대해서 틀릴 수도있다), PHP는 변수와 특수 문자 (\ t, \ n 등)의 큰 따옴표 안에 내용을 캔하고 파싱합니다. 작은 따옴표를 사용할 때 변수 나 특수 문자를 구문 분석하지 않으므로 속도가 약간 증가 할 수 있습니다 . 당신이 그것을 좋아 작성하는 경우

+0

문자열 해석에 대해 알고있는 바로는 이것은 신화로, 작은 따옴표가 더 빠를 것입니다. 내 경험상 그 반대입니다. –

6

가능성이 속도 차이가있을 것이다 . 차이점이 중요한지 묻는 것이 필요합니다. 이 경우, 아니, 나는 걱정할 필요가 없다고 생각한다. 그 차이는 너무 무시할 수 있습니다.

나는 당신이 시각적으로 가장 이해하기 쉬운 것을하는 것이 좋습니다. "$a and $b went out to see $c"은 약간 혼란 스러울 수 있습니다. 경로를보고 싶다면 변수 주위에 중괄호 ({})를 사용하십시오 (예 : "{$a} and {$b} went out to see {$c}").

+0

최소한의 놀라움의 원칙에 따라 똑같은 것을 의미하는 두 가지 구문이 동일한 속성을 가져야합니다. PHP에서 그렇지 않을 수도 있다는 사실은 PHP의 나쁜 속성입니다. –

+0

@Ira : 그것은 더 나빠요 ... 내 결과는 아래를 참조하십시오. 한 경우에 가장 빠른 것은 가장 느릴 수 있습니다. –

1

왜 테스트 해 보시지 않겠습니까?숫자가 거짓말하지 않는다면, 다른 사람보다 잘 수행된다면, 이유를 물어야합니다.

+1

이 답변이 왜 내려 갔는지 모릅니다. PHP를 사용할 때 최고의 조언입니다. –

+0

도움이되지 않았기 때문에. 나는 이미 그것을 스스로 시도 할 수 있다는 것을 알았다. 나는 다른 사람들이 무엇을 말했는지보기 위해 여기에 올렸다. –

2

나는 빠른 벤치 마크를했고, 다른 사람들이 말했듯이 그 결과는 매우 일치하지 않았습니다. 이중 따옴표 대신 작은 따옴표를 사용하여 성능 향상을 발견하지 못했습니다. 내 추측에 따르면 모든 것은 선호도에 달려있다.

코딩 스타일에 대해 한 가지 유형의 견적을 고집하고 싶다면 큰 따옴표를 선택하십시오. 교체 기능은 생각보다 훨씬 더 편리합니다.

벤치 마크 코드 on github을 넣었습니다.

2

이 수준의 문자열 연결 속도가 우려된다면 잘못된 언어를 사용하고있는 것입니다. 이 실제로에 병목 현상이있는 경우이 사용 사례에 대해 C로 응용 프로그램을 컴파일하고 PHP 스크립트에서 호출합니다.

+0

매우 도움이되지 않는 답변입니다. 날씨가 따뜻해 져서 마이애미로 가야하는지 묻는 보스턴의 누군가에게 말하는 것과 같습니다. – MikeSchinkel

+0

@MikeSchinkel : 나는 비유가 오히려 다음과 같을 것이라고 생각한다. "나는 퀘벡으로의 캠핑 여행을하고 싶다. 궁금하다. 보스턴의 날씨는 어떠니?". 대답은 분명합니다. "퀘벡은 보스턴에 있지 않고 미국이 아니라도 잘못된 대답을 찾고 있습니다." 구문이 더 빠르다고 말하면 OP가 잘못된 정보에 집중할 수있게되어 더 나은 개발자가 될 수 없습니다. 동일한 생각 (조금 더 공격적으로 표현됨)은 다음에서 찾을 수 있습니다. http://weblogs.asp.net/alex_papadimoulis/archive/2005/05/25/408925.aspx – soulmerge

+0

@soulmerge - 도구를 사용하는 것이 올바른 유일한 인식 일 수 있습니다. 매일 너무 많은 지능이 떨어지는 사람들을 다루어야하는 것은 매우 외롭고해야합니다. – MikeSchinkel

-2

차이는 없습니다. ;)

+0

확실하지만 중요한 것은 아닙니다.한 PHP 버전에서 다른 버전으로의 일관성도 없습니다. –

관련 문제