Это может быть глупым вопросом, но как кто-то относительно плохо знакомый с 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
Интересовался бы слушанием некоторых представлений об этом, даже если оно должно только услышать, что не имеет никакого значения.
Спасибо.
Три простых правила, которые помогут вам понять:
Проблемы с производительностью довольно сложно понять. Новичкам рекомендуется не учитывать это. Потому что им всегда импонируют мелочи и не видят действительно важного. Просто из-за отсутствия опыта.
То же самое и с вашим вопросом. Представьте, что вы когда-нибудь почувствуете разницу. Даже большой, скажем, одним способом в 2 раза быстрее. Ой, 2 раза! Я выбрал его и хорошо оптимизировал приложение, теперь оно будет работать на 50% быстрее!
Неправильно . Не 50%. Вы никогда не заметите и даже не заметите этого увеличения скорости. Потому что вы оптимизировали часть, которая занимает всего 0,0001% всего времени выполнения скрипта.
Что касается больших таблиц HTML, браузеру требуется много времени, чтобы отобразить их.Гораздо больше, чем вам нужно было произвести.
Профилирование - ключевое слово в мире производительности. Можно без сомнений отбросить любой вопрос, связанный с производительностью, если в нем нет слова «профилирование».
В то же время профилирование - это не ракетостроение. Я просто измеряю время выполнения различных частей вашего скрипта. Это можно сделать с помощью профилировщика, например xdebug, или даже вручную, используя microtime (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>';
}
}
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
Поскольку я сомневаюсь, что мне понадобится столько данных за один раз, Думаю, я продолжу использовать множество тегов, отступы кода выглядят аккуратнее, а макет «просмотреть исходный код» - более точным