Есть ли разница в скорости между <? 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%), стоит оптимизировать ее. Если ваши сценарии медленные, сначала посмотрите на ваши циклы. В большинстве случаев вы можете добиться гораздо большей производительности, оптимизируя поток программ, чем используя странный синтаксис.

Другие вопросы по тегам