태그 열기/닫기 및 퍼포먼스
어리석은 질문일 수도 있지만, PHP를 비교적 처음 접하는 사람으로서 HTML 템플릿 코드로 PHP 태그를 자주 열고 닫는 퍼포먼스 관련 문제가 없는지 궁금하고, 있다면 PHP 태그로 작업하는 베스트 프랙티스는 무엇입니까?
제 질문은 닫는 태그의 중요성/정확성 또는 다른 코드보다 읽기 쉬운 코드 유형이 아니라 문서가 어떻게 해석/실행되고 성능에 어떤 영향을 미칠 수 있는지에 대한 것입니다.
예를 들면, 다음의 2개의 극단점에 대해 생각해 봅시다.
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
이 문제에 대한 견해를 듣고 싶군요. 차이가 없다고 해도 말이죠.
감사합니다.
올바르게 하기 위한 3가지 간단한 규칙:
- 구문 문제는 성능에 영향을 줄 수 없습니다.데이터 조작은 그렇습니다.
- 프로파일링 결과만으로 뒷받침되는 퍼포먼스에 대해 말합니다.
- 섣부른 최적화는 모든 악의 근원이다.
성능 문제는 이해하기 어렵습니다.초보자는 그것을 고려하지 않는 것이 좋다.왜냐하면 그들은 항상 사소한 것에 감동하고 진짜 중요한 것을 보지 못하기 때문이다.경험이 부족해서 그래요.
질문도 마찬가지입니다.언젠가 달라질 거라고 상상해 보세요.예를 들어 큰 방법이라도 한 가지 방법이 2배 빠릅니다.어머나, 두 번!잘 선택해서 앱을 최적화했더니 50% 빨라졌어요!
틀렸어. 50% 아니야.이 속도 증가를 눈치채거나 측정조차 할 수 없습니다.전체 스크립트 런타임의 0,0001%만 사용하는 부분을 최적화했기 때문입니다.
큰 HTML 테이블은 브라우저가 렌더링하는 데 시간이 오래 걸립니다.당신이 만들어내는 것보다 훨씬 더 많이요.
프로파일링은 퍼포먼스계의 키워드입니다.퍼포먼스 관련 질문은 프로파일링이라는 단어가 없는 경우 문제없이 폐기할 수 있습니다.동시에 프로파일링은 로켓 과학이 아닙니다.스크립트의 다른 부분의 실행 시간을 측정하는 것입니다.xdebug를 사용하여 할 수 .microtime(1)
그리고 가장 느린 부분을 검출한 후에만 테스트를 시작할 수 있습니다.
퍼포먼스에 관한 질문을 하기 전에 프로파일링을 학습합니다.또, 퍼포먼스에 관한 질문은, 실제의 이유가 없는 경우는 하지 말아 주세요.
5만 행으로 테스트를 다시 하고 태그 방식 하나로 멀티 에코를 추가했습니다.
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
}
}
지속시간 1: 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>';
}
}
지속시간 3: 27.54640007초
기존 2가지 방법과는 큰 차이가 없지만, @poke의 접속이 적어 꽤 빠른 것 같습니다.
한 번에 이렇게 많은 데이터가 필요할 것 같지 않기 때문에 많은 태그를 계속 사용할 것이고 코드 들여쓰기가 깔끔해 보이고 '뷰 소스' 레이아웃이 더 정확합니다.
이 두 가지 성능 차이는 무시해도 좋습니다.오늘날의 컴퓨팅 리소스에서는 차이가 크게 문제가 되지 않습니다.이런 종류의 화면 인쇄는 정말 걱정할 필요가 없습니다.당신이 전에 고려해야 할 다른 것들이 많이 있어요.이와는 별도로 최고의 퍼포먼스와 코드의 유지 보수성 사이에는 항상 논쟁이 있습니다.항상 최고의 성과를 얻으려고 할 수는 없습니다.그 대신 퍼포먼스에 대한 우려와 개선을 위해 소비하는 시간을 항상 고려해야 합니다.
의사 코드로 변환하기 쉬운 코드가 좋습니다.이것은 위의 예에 의해 증명된다.어느 쪽이 더 오래 걸립니까?
"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."
통역사가 어떻게 작동하는지, 왜 한 방법이 다른 방법보다 더 빠른지에 대한 기술적인 설명은 초보자에게 무관합니다.경험의 법칙만 아는 것이 가장 좋습니다.
- 심플할수록 좋다.
- 한 페이지에 들어가지 않으면 너무 많은 작업을 하고 있는 것입니다.
- 인덱스 카드에 의사 코드를 손으로 쓸 수 없는 경우는, 너무 복잡합니다.
전체 결과가 더 단순할 경우 더 많은 태그를 사용합니다.마침표
이것의 진짜 문제는 메모리 사용입니다.문자열 연결 및 매스 에코잉은 메모리 사용을 기하급수적으로 증가시킬 수 있습니다.
php 태그를 스팸으로 보내면 코드를 읽을 수 없게 됩니다.
가장 좋은 해결책은 템플릿엔진을 사용하여 코드와 프레젠테이션이 혼재되지 않도록 하는 것입니다.
언급URL : https://stackoverflow.com/questions/2437144/opening-closing-tags-performance
'programing' 카테고리의 다른 글
이름 값 컬렉션으로의 URI 문자열 해석 (0) | 2022.09.24 |
---|---|
오프라인 개발을 위해 Maven을 설정하려면 어떻게 해야 합니까? (0) | 2022.09.24 |
루프나 조건문을 사용하지 않고1 ~ 1000 으로 인쇄하는 C 코드는 어떻게 동작합니까? (0) | 2022.09.24 |
C/C++에서 메모리 부족 상황에 적절하게 대처하는 방법은 무엇입니까? (0) | 2022.09.24 |
python에서 두 datetime 객체의 시간 차이를 찾으려면 어떻게 해야 합니까? (0) | 2022.09.24 |