PHP эхо производительность - PullRequest
2 голосов
/ 20 марта 2011

Какая из этих команд будет работать лучше?Наихудший?И почему?

echo 'A: '.$a.' B: '.$b.' C: '.$c;

echo 'A: ', $a, ' B: ', $b, ' C: ', $c;

echo "A: $a B: $b C: $c";

Ответы [ 2 ]

5 голосов
/ 20 марта 2011
echo 'A: ', $a, ' B: ', $b, ' C: ', $c;

будет самым быстрым, потому что здесь все части строки непосредственно копируются в выходной поток, тогда как другие варианты будут включать в себя первую конкатенацию частей строки. «Конкатенация» означает, что для каждой части строки должен быть выделен новый фрагмент памяти и в него скопирована предыдущая строка.

Я проиллюстрирую это на следующем примере

echo 'Hallo', ' ', 'World', '!', "\n", 'How are you?';
// vs.
echo 'Hallo' . ' ' . 'World' . '!' . "\n" . 'How are you?';

Первый копирует 5 байтов + 1 байт + 5 байт + 1 байт + 1 байт + 12 байт в выходной поток, таким образом копируя 25 байт. Второй создает строку с 5 байтами, затем создает строку с 6 байтами и копирует в нее 5 + 1 байт, затем создает строку с 11 байтами и копирует в нее 6 + 5 байтов, затем создает строку с 12 байт и копирует в него 11 + 1 байт, затем создает строку с 13 байтами и копирует в нее 12 + 1 байт, затем создает строку с 25 байтами и копирует в нее 13 + 12 байт, а затем в конечном итоге копирует эти 25 байт. байты в выходной буфер. Это будет скопировано на 92 байта и будет выделено больше памяти.

Но на самом деле, ты не должен заботиться об этом. Я очень сомневаюсь, что узким местом вашего приложения будет echo производительность;)

Но все же есть причина, по которой я использую echo с запятыми вместо операторов конкатенации: запятая имеет наименьший из всех операторных приоритетов . Таким образом, вам никогда не придется писать круглые скобки.

Например, это будет работать:

echo 'The script executed in ', microtime(true) - $startTime, ' seconds';

Принимая во внимание, что это не будет работать должным образом (и я думаю, что это неопределенное поведение):

echo 'The script executed in ' . microtime(true) - $startTime . ' seconds';
3 голосов
/ 20 марта 2011

О нет, этот вопрос снова.

Ни один из них не является лучшим.

Они все одинаковые.

Более того, ни один из них не должен использоваться никогда.
Это должен быть шаблон , , который выводит ваши данные, и вы должны использовать их функции, а не печатать значения из вашего бизнес-кода напрямую.

И снова разницы в скорости нет.
Никакой перегруженный сервер не получит никакой помощи от такой «оптимизации». Не великий и даже не малейший. Если вы хотите помочь перегруженному серверу, вы должны профилировать его производительность, не делая бесполезных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...