Есть ли разница в скорости между <? Phpecho $ var;?> и <? =$var?>?
Есть ли разница в скорости между этими двумя версиями?
<?php echo $var; ?>
<?=$var?>
Что вы рекомендуете и почему?
9 ответов
Разница в производительности незначительна. Более того, при использовании APC разница в производительности равна нулю, нулю, нада.
<?=$var?>
требуются короткие теги. Короткие теги проблематичны в XML, потому что <?
также разметка для тега обработки XML. Поэтому, если вы пишете код, который должен быть переносимым, используйте длинную форму.
Увидеть short_open_tag
описание в http://www.php.net/manual/en/ini.core.php
Технически синтаксический анализатор должен анализировать каждый символ более длинной версии, и для каждой передачи есть еще несколько символов.
Если ваш веб-сервер не "предварительно компилируется" (т. Е. Кэширует страницы PHP с токенами), тогда существует небольшая разница в производительности. Это должно быть незначительным, за исключением, может быть, когда вы начинаете говорить о миллиардах пробежек.
-Адам
Производительность в этом отношении незначительна.
Правильное использование говорит о том, чтобы использовать более длинный, так как он более переносимый. Лично? Я делаю короче.
В php 5.3 поддержка ASP-стиля <%%> не рекомендуется, попробуйте избежать этого и переписать код в '<?php echo' format
потому что ты не можешь использовать <?xml ?>
встроенный например.
Нет, они идентичны. Если вам нравится печатать много, используйте <?php echo $var; ?>
иначе просто сэкономите время <?=$var?>
,
Что вы рекомендуете
Кроме того, если вы действительно не хотите разрешить внедрение HTML. (99% времени, вы не делаете.)
<?php echo htmlspecialchars($var); ?>
Или определите функцию, которая выполняет echo(htmlspecialchars($arg)) с более коротким именем, чтобы избежать всей этой типизации.
Эти две строки кода идентичны.
Я добавляю поздний ответ, потому что никто не доказал это еще, но ответ не однозначно нет, нет разницы в производительности именно потому, что нет никакой разницы вообще в том, как PHP выполняет эти две строки кода.
Интерпретатор видит одинаковый код в обоих случаях. Парсер выдает точно такой же AST, потому что<?=
принципиально идентичен <?php echo
. Нет никакой разницы в инструкциях, которые интерпретатор запускает, когда вы пишете<?=
против <?php echo
.
Установив php-ast, вы можете проверить AST, созданный обеими строками кода.
Учитывая эти два случая...
# CASE 1
<?php echo $i %>
# CASE 2
<?= $i ?>
Дерево абстрактного синтаксиса для обоих идентично:
case 1
AST_STMT_LIST
0: AST_ECHO
expr: AST_VAR
name: "i"
case 2
AST_STMT_LIST
0: AST_ECHO
expr: AST_VAR
name: "i"
Это означает, что PHP не может определить разницу между ними во время выполнения, не говоря уже о некоторой разнице в производительности.
Код для создания этого вывода выглядит следующим образом и использует util.php:
<?php
require('util.php');
echo "case 1\n";
echo ast_dump(ast\parse_code('<?php echo $i ?>', $version=50));
echo "\n";
echo "case 2\n";
echo ast_dump(ast\parse_code('<?= $i ?>', $version=50));
echo "\n";
Оптимизация здесь неуместна. Выбор сводится к личным предпочтениям, тем более что<?=
всегда доступен, не имеет ничего общего с короткими тегами, никогда не был объявлен устаревшим и не планируется удалять из языка.
Я думаю, что второй требует, чтобы short_open_tag (в PHP.ini) был установлен в true.
Это означает, что есть вероятность, что он отключен на некоторых веб-серверах.
Разница в скорости зависит от того, как быстро вы сможете набрать эти 9 дополнительных символов.
Он также может улучшить читаемость кода, но это спорно.
Если вы говорите о скорости выполнения, то заметной разницы нет.
Не пытайтесь оптимизировать с этим, это бесполезно. Вместо этого отключите allow_short_tags (из-за проблем при загрузке XML-файлов) и напишите чистый, читаемый и понятный код.
Даже если может быть небольшая разница (которая определенно меньше 10%), стоит оптимизировать ее. Если ваши сценарии медленные, сначала посмотрите на ваши циклы. В большинстве случаев вы можете добиться гораздо большей производительности, оптимизируя поток программ, чем используя странный синтаксис.