>

(php5라고 가정)

<?php
    $foo = 'some words';
    //case 1
    print "these are $foo";
    //case 2
    print "these are {$foo}";
    //case 3
    print 'these are ' . $foo;
?>

1과 2 사이에 많은 차이가 있습니까?

그렇지 않다면 1/2에서 3 사이는 어떻습니까?


  • 답변 # 1

    모든 "실제에서 더 빠를 수있는"질문과 마찬가지로 실제 테스트를 이길 수는 없습니다.

    function timeFunc($function, $runs)
    {
      $times = array();
      for ($i = 0; $i < $runs; $i++)
      {
        $time = microtime();
        call_user_func($function);
        $times[$i] = microtime() - $time;
      }
      return array_sum($times) / $runs;
    }
    function Method1()
    { 
      $foo = 'some words';
      for ($i = 0; $i < 10000; $i++)
        $t = "these are $foo";
    }
    function Method2()
    {
      $foo = 'some words';
      for ($i = 0; $i < 10000; $i++)
        $t = "these are {$foo}";
    }
    function Method3()
     {
      $foo = 'some words';
      for ($i = 0; $i < 10000; $i++)
        $t = "these are " . $foo;
    }
    print timeFunc('Method1', 10) . "\n";
    print timeFunc('Method2', 10) . "\n";
    print timeFunc('Method3', 10) . "\n";
    
    

    모든 것을 페이지로 넘기려면 몇 번 실행하십시오 ...

    0.0035568

    0.0035388

    0.0025394

    따라서 보간은 예상대로 보간이 거의 동일합니다 (보간 엔진이 처리해야하는 추가 문자로 인해 노이즈 레벨 차이가있을 수 있음). 연속 연결은 속도의 약 66 %이며 큰 충격이 아닙니다. 보간 파서는보고, 수행 할 작업을 찾은 다음 간단한 내부 문자열 연결로 마무리합니다. concat이 비싸더라도 보간 기는 변수를 파싱하고 원래 문자열을 트리밍/복사하기 위해 모든 작업을이후수행해야합니다.

    Somnath의 업데이트 :

    실시간 로직 위에 Method4 ()를 추가했습니다.

    function Method4()
     {
      $foo = 'some words';
      for ($i = 0; $i < 10000; $i++)
        $t = 'these are ' . $foo;
    }
    print timeFunc('Method4', 10) . "\n";
    Results were:
    0.0014739
    0.0015574
    0.0011955
    0.001169
    
    

    문자열 만 선언하고 해당 문자열을 구문 분석 할 필요가없는 경우, PHP 디버거를 구문 분석하기 위해 혼동하는 이유는 무엇입니까? 내 의견이 있으시길 바랍니다.

  • 답변 # 2

    2012 년 1 월 이후로 성능 차이는 관련이 없었으며 이전에는 아마도 더 높았습니다.

    Single quotes: 0.061846971511841 seconds
    Double quotes: 0.061599016189575 seconds
    
    

    이전의 PHP 버전에는 차이가있을 수 있습니다. 개인적으로 작은 따옴표를 큰 따옴표보다 선호하기 때문에 편리한 차이였습니다. 이 기사의 결론은 훌륭한 지적입니다.

    와이즈 비즈

    (이 기사는이 문구를 인용하지만, 원래의 퀴프는 처칠을 거짓말 쟁이로 묘사하기 위해 Joseph Goebbels의 선전 부처가 발명 한 Winston Churchill에 허위로 귀속되었을 가능성이 높습니다 :

    와이즈 비즈

    이것은 "나 자신을 속이지 않았다는 통계를 믿지 않는다"는 의미가 없다.)

  • 답변 # 3

    라이브 벤치 마크 :

    http://phpbench.com/

    작은 따옴표와 큰 따옴표로 변수를 연결할 때 실제로 미묘한 차이가 있습니다.

  • 답변 # 4

    @Adam의 테스트 사용

    Never trust a statistic you didn’t forge yourself.

    다음이 훨씬 빠릅니다.

    Ich traue keiner Statistik, die ich nicht selbst gefälscht habe.

    이것은 큰 따옴표로 묶인 "문자열"이 평가되기 때문에 작은 따옴표로 묶인 '문자열'이 그대로 사용됩니다 ...

  • 답변 # 5

    너무 많이 붙 잡지 마십시오 PHP에서 문자열 연산을 최적화하려고합니다. 데이터베이스 쿼리가 제대로 작성되지 않았거나 캐싱 구성표를 사용하지 않는 경우 연결 대 보간은 의미가 없습니다 (실제 성능에서는). 나중에 코드를 쉽게 디버깅 할 수있는 방식으로 문자열 연산을 작성하십시오. 성능 차이는 무시할 수 있습니다.

    @uberfuzzy 이것이 언어 사소한 것에 대한 질문이라고 가정하면, 괜찮습니다. 나는 데이터베이스 쿼리와 같은 실제 성능 싱크와 비교할 때 실제 응용 프로그램에서 작은 따옴표, 큰 따옴표 및 heredoc 간의 성능을 의미가 없다는 대화에 추가하려고합니다.

    "these are " . $foo

  • 이전 c++ - C ++ 11 지원을 확인하려면 어떻게합니까?
  • 다음 .net - C #에서 양방향 1 대 1 사전