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

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

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

Благодарю.

Solutions Collecting From Web of "Открытие / закрытие тегов и производительности?"

3 простых правила, чтобы вы поняли это правильно:

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

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

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

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

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

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

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

Преждевременная оптимизация – корень всего зла – D.Knuth .

Я переделал тесты с 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 секунды

 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

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

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

Код, который легко перевести на псевдокод, лучше. Об этом свидетельствуют приведенные выше примеры. Что требует больше времени?

 "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." 

Техническое объяснение того, как работает интерпретатор и почему один путь быстрее другого, не имеет значения для новичков. Лучше всего знать эмпирические правила:

  1. Проще лучше.
  2. Если он не помещается на одной странице, он делает слишком много (сломайте его).
  3. Если вы не можете вручную написать псевдокод на карточке-индексе, это слишком сложно.

Используйте больше тегов, если общий результат проще. Период.

Реальная проблема с этим – использование памяти. Конкатенация строк и массовое эхо-сигналы могут увеличить использование памяти экспоненциально.

Если вы спамеруете тег php, ваш код становится нечитаемым.

Лучшее решение – использовать механизм шаблонов и вообще не смешивать код и презентацию.