Открытие/закрывающие тэги и производительность?

Это может быть глупым вопросом, но как кто-то относительно плохо знакомый с PHP, я задаюсь вопросом, существуют ли какие-либо связанные с производительностью проблемы к частому открытию и закрытию тегов PHP в коде шаблона HTML, и если так, каковы могли бы быть лучшие практики с точки зрения работы с тегами 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

Интересовался бы слушанием некоторых представлений об этом, даже если оно должно только услышать, что не имеет никакого значения.

Спасибо.

90
задан genesis 2 October 2011 в 12:20
поделиться

3 ответа

Три простых правила, которые помогут вам понять:

  • Никакие проблемы с синтаксисом не могут повлиять на производительность. Манипулирование данными делает.
  • О производительности говорят только на основании результатов профилирования .
  • Преждевременная оптимизация - корень всех зол.

Проблемы с производительностью довольно сложно понять. Новичкам рекомендуется не учитывать это. Потому что им всегда импонируют мелочи и не видят действительно важного. Просто из-за отсутствия опыта.

То же самое и с вашим вопросом. Представьте, что вы когда-нибудь почувствуете разницу. Даже большой, скажем, одним способом в 2 раза быстрее. Ой, 2 раза! Я выбрал его и хорошо оптимизировал приложение, теперь оно будет работать на 50% быстрее!

Неправильно . Не 50%. Вы никогда не заметите и даже не заметите этого увеличения скорости. Потому что вы оптимизировали часть, которая занимает всего 0,0001% всего времени выполнения скрипта.

Что касается больших таблиц HTML, браузеру требуется много времени, чтобы отобразить их.Гораздо больше, чем вам нужно было произвести.

Профилирование - ключевое слово в мире производительности. Можно без сомнений отбросить любой вопрос, связанный с производительностью, если в нем нет слова «профилирование». В то же время профилирование - это не ракетостроение. Я просто измеряю время выполнения различных частей вашего скрипта. Это можно сделать с помощью профилировщика, например xdebug, или даже вручную, используя microtime (1) . И только после обнаружения самой медленной части можно приступать к тестам.

Научитесь профилировать, прежде чем задавать вопросы об эффективности. И научитесь не задавать вопросы об эффективности, если для этого нет реальных причин.

Преждевременная оптимизация - корень всех зол - Д.Кнут .

85
ответ дан 24 November 2019 в 07:05
поделиться

Вы можете легко игнорировать разницу в производительности между этими двумя программами. При современных вычислительных ресурсах эта разница действительно не имеет значения. О таких вещах, как печать на экране, действительно не стоит беспокоиться. Есть масса других вещей, которые вы должны рассмотреть до этого. Кроме того, всегда существует спор между лучшей производительностью и удобством обслуживания кода. Вы не можете всегда пытаться достичь наилучшей производительности. Вместо этого, вы всегда должны учитывать проблемы производительности, а также количество времени, которое вам нужно потратить на ее улучшение.

13
ответ дан 24 November 2019 в 07:05
поделиться

Я переделал тесты с 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>';
    }
}

duration2: 30.23169804 Seconds

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 Seconds

Небольшая разница между двумя исходными методами, но похоже, что это немного быстрее с меньшим количеством конкатенаций @poke

Поскольку я сомневаюсь, что мне понадобится столько данных за один раз, Думаю, я продолжу использовать множество тегов, отступы кода выглядят аккуратнее, а макет «просмотреть исходный код» - более точным

39
ответ дан 24 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: