복붙노트

태그 / 성능 열기 / 닫기?

PHP

태그 / 성능 열기 / 닫기?

이것은 바보 같은 질문 일지 모르지만 PHP에 비교적 익숙하지 않은 사람은 HTML 템플릿 코드에서 PHP 태그를 자주 열고 닫는 것과 관련된 성능 관련 문제가 있는지 궁금합니다. 그렇다면 모범 사례가되는 용어 PHP 태그로 작업 하시겠습니까?

제 질문은 닫는 태그의 중요성 / 정확성이나 다른 코드보다 읽기 쉬운 코드 유형에 관한 것이 아니라 문서가 구문 분석 / 실행되는 방법과 성능에 어떤 영향을 미칠 수 있는지에 관한 것입니다.

설명하기 위해 다음 두 가지 극단을 고려하십시오.

PHP와 HTML 태그 섞기 :

<?php echo
   '<tr>
       <td>'.$variable1.'</td>
       <td>'.$variable2.'</td>
       <td>'.$variable3.'</td>
       <td>'.$variable4.'</td>
       <td>'.$variable5.'</td>
   </tr>'
?>
// PHP tag opened once

PHP와 HTML 태그 분리 :

<tr>
   <td><?php echo $variable1 ?></td>
   <td><?php echo $variable2 ?></td>
   <td><?php echo $variable3 ?></td>
   <td><?php echo $variable4 ?></td>
   <td><?php echo $variable5 ?></td>
</tr>
// PHP tag opened five times

아무런 차이가 없다는 말을 듣고 싶어도이 점에 관해 의견을 듣고 싶습니다.

감사.

해결법

  1. ==============================

    1.올바른 규칙 3 가지 :

    올바른 규칙 3 가지 :

    성능 문제는 이해하기가 어렵습니다. 초보자들도 그것을 고려하지 말 것을 권고합니다. 왜냐하면 그들은 사소한 일에 항상 감명을 받고 진정한 중요한 일들을 보지 못하기 때문입니다. 경험이 부족하기 때문에.

    귀하의 질문에 동일합니다. 상상해보십시오. 큰 방법 일지라도, 한 가지 방법은 2 배 빠릅니다. 오, 이런, 2 번! 나는 그것을 선택하고 잘 내 애플 리케이션을 최적화, 지금은 50 % 빠르게 실행됩니다!

    잘못된. 50 %가 아닙니다. 이 속도 증가를 감지하거나 측정하지 않습니다. 전체 스크립트 런타임 중 0,0001 % 만 차지하는 부분을 최적화했기 때문입니다.

    큰 HTML 테이블의 경우 브라우저에서 렌더링하는 데 오랜 시간이 걸립니다. 당신이 생성하는 것보다 훨씬 더.

    프로파일 링은 성능 세계에서 핵심 단어입니다. "프로파일 링"이라는 단어가 없으면 성능 관련 질문을 의심없이 무시할 수 있습니다. 동시에 프로파일 링은 로켓 과학이 아닙니다. 나는 단지 스크립트의 다른 부분의 런타임을 측정 한 것입니다. microdex (1)을 사용하여 xdebug와 같은 일부 프로파일 러를 사용하거나 수동으로 수행 할 수도 있습니다. 가장 느린 부분을 감지 한 후에 만 ​​테스트를 시작할 수 있습니다.

    실적 관련 질문을하기 전에 프로필 작성 방법을 배우십시오. 실제 이유가없는 경우 실적 질문을하지 않는 방법을 배우십시오.

    조숙 한 최적화는 모든 악의 근원입니다. D.Knuth.

  2. ==============================

    2.50,000 개의 행으로 테스트를 다시하고 1 개의 태그 메서드에 멀티 에코를 추가했습니다.

    50,000 개의 행으로 테스트를 다시하고 1 개의 태그 메서드에 멀티 에코를 추가했습니다.

    for ($j=0;$j<30;$j++) {
        foreach ($results as $key=>$val){
        ?>
           <tr>
               <td><?php echo $results[$key][0]?></td>
               <td><?php echo $results[$key][1]?></td>
               <td><?php echo $results[$key][2]?></td>
               <td><?php echo $results[$key][3]?></td>
               <td><?php echo $results[$key][4]?></td>
               <td><?php echo $results[$key][5]?></td>
               <td><?php echo $results[$key][6]?></td>
               <td><?php echo $results[$key][7]?></td>
               <td><?php echo $results[$key][8]?></td>
               <td><?php echo $results[$key][9]?></td>
               <td><?php echo $results[$key][10]?></td>
               <td><?php echo $results[$key][11]?></td>
               <td><?php echo $results[$key][12]?></td>
               <td><?php echo $results[$key][13]?></td>
               <td><?php echo $results[$key][14]?></td>              
           </tr>
        <?php 
        }
    }
    

    duration1 : 31.15542483 초

    for ($k=0;$k<30;$k++) {
        foreach ($results as $key1=>$val1){
            echo
               '<tr>
                   <td>'.$results[$key1][0].'</td>
                   <td>'.$results[$key1][1].'</td>
                   <td>'.$results[$key1][2].'</td>
                   <td>'.$results[$key1][3].'</td>
                   <td>'.$results[$key1][4].'</td>
                   <td>'.$results[$key1][5].'</td>
                   <td>'.$results[$key1][6].'</td>
                   <td>'.$results[$key1][7].'</td>
                   <td>'.$results[$key1][8].'</td>
                   <td>'.$results[$key1][9].'</td>
                   <td>'.$results[$key1][10].'</td>
                   <td>'.$results[$key1][11].'</td>
                   <td>'.$results[$key1][12].'</td>
                   <td>'.$results[$key1][13].'</td>
                   <td>'.$results[$key1][14].'</td>              
               </tr>';
        }
    }
    

    재생 시간 2 : 30.23169804 초

    for ($l=0;$l<30;$l++) {
        foreach ($results as $key2=>$val2){     
               echo'<tr>';
                   echo'<td>'.$results[$key2][0].'</td>';
                   echo'<td>'.$results[$key2][1].'</td>';
                   echo'<td>'.$results[$key2][2].'</td>';
                   echo'<td>'.$results[$key2][3].'</td>';
                   echo'<td>'.$results[$key2][4].'</td>';
                   echo'<td>'.$results[$key2][5].'</td>';
                   echo'<td>'.$results[$key2][6].'</td>';
                   echo'<td>'.$results[$key2][7].'</td>';
                   echo'<td>'.$results[$key2][8].'</td>';
                   echo'<td>'.$results[$key2][9].'</td>';
                   echo'<td>'.$results[$key2][10].'</td>';
                   echo'<td>'.$results[$key2][11].'</td>';
                   echo'<td>'.$results[$key2][12].'</td>';
                   echo'<td>'.$results[$key2][13].'</td>';
                   echo'<td>'.$results[$key2][14].'</td>';              
               echo'</tr>';
        }
    }
    

    duration3 : 27.54640007 초

    원래 2 가지 방법의 차이는 크지 않지만, 연결이 적을수록 속도가 약간 빨라집니다. @poke

    이후 많은 데이터가 필요하다는 것을 알기 때문에 많은 태그를 계속 사용하고 코드 들여 쓰기가 더 깔끔하게 보이고 '소스보기'레이아웃을보다 정확하게 만듭니다.

  3. ==============================

    3.이 둘의 성능 차이는 쉽게 무시할 수 있습니다. 오늘날의 최신 컴퓨팅 리소스를 사용하면 그 차이가 실제로 중요하지 않습니다. 이런 종류의 인쇄물은 걱정할 필요가 없습니다. 당신이 전에 고려해야 할 다른 것들이 있습니다. 그 외에도 최상의 성능과 코드 유지 관리 간에는 항상 논쟁의 여지가 있습니다. 항상 최고의 성능을 얻을 수는 없습니다. 대신 성능 향상과 함께 개선해야 할 시간을 고려해야합니다.

    이 둘의 성능 차이는 쉽게 무시할 수 있습니다. 오늘날의 최신 컴퓨팅 리소스를 사용하면 그 차이가 실제로 중요하지 않습니다. 이런 종류의 인쇄물은 걱정할 필요가 없습니다. 당신이 전에 고려해야 할 다른 것들이 있습니다. 그 외에도 최상의 성능과 코드 유지 관리 간에는 항상 논쟁의 여지가 있습니다. 항상 최고의 성능을 얻을 수는 없습니다. 대신 성능 향상과 함께 개선해야 할 시간을 고려해야합니다.

  4. ==============================

    4.의사 코드로 쉽게 변환 할 수있는 코드가 더 좋습니다. 이것은 위의 예에 의해 입증됩니다. 어떤 말을 더 오래 걸리나요?

    의사 코드로 쉽게 변환 할 수있는 코드가 더 좋습니다. 이것은 위의 예에 의해 입증됩니다. 어떤 말을 더 오래 걸리나요?

    "Start php, do this 30 times:, then stop php.  Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php..."
    
    "Start php, do this 30 times: print this, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that..."
    
    "Start php, do this 30 times: print this, print this, print this, print this, print this, print this, print this..."
    

    개인적으로 나는 할 것이다 :

    "Start php, define this, do this 30 times: add this to that.  Print." 
    

    통역사가 어떻게 작동하는지, 그리고 한 쪽이 다른 쪽보다 빠르다는 기술적 인 설명은 초보자에게는 부적합합니다. 엄지 손가락의 규칙을 아는 것이 가장 좋습니다.

    전반적인 결과가 더 간단하면 더 많은 태그를 사용하십시오. 기간.

  5. ==============================

    5.이것의 실제 문제는 메모리 사용입니다. 문자열 연결 및 질량 반향은 메모리 사용을 기하 급수적으로 증가시킬 수 있습니다.

    이것의 실제 문제는 메모리 사용입니다. 문자열 연결 및 질량 반향은 메모리 사용을 기하 급수적으로 증가시킬 수 있습니다.

    PHP 태그를 스팸하면 코드를 읽을 수 없게됩니다.

    가장 좋은 해결책은 템플릿 엔진을 사용하고 코드와 프레젠테이션을 함께 사용하지 않는 것입니다.

  6. from https://stackoverflow.com/questions/2437144/opening-closing-tags-performance by cc-by-sa and MIT license