Pull to refresh

Эхо или печать?

Reading time 3 min
Views 36K
Вопрос: «Что быстрее — echo или print?» не перестаёт будоражить умы тех, кто считает себя профессиональным программистом на PHP. Руководство пользователя осторожно упоминает об имеющемся различии, но отсылает к статье стороннего авторства; та, в свою очередь, утверждает, что echo быстрее, но не приводит доказательств; трудно найти объективное сравнение, и всё это придаёт проблеме некий мистический ореол, на что клюют многие и многие.

Так не будем же оставаться в стороне и постараемся раз и навсегда разгадать эту загадку!



Поведенческое различие echo и print заключается в том, что последний может вести себя как функция (всегда возвращающая единицу); вследствие этого print можно использовать в контексте, например, тернарного оператора, что иногда может быть весьма привлекательным. Echo как функцию использовать нельзя, зато она может принимать несколько аргументов через запятую, при этом их нельзя брать в скобки; тогда как у print ровно один аргумент, и он может быть как в скобках, так и без.

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

Для проведения испытаний я составил стенд, на котором 1000 раз выводятся 1000 строк (длиной 32 символа каждая); при этом используется один из пяти методов:

  1. print "$value<br />";
  2. echo "$value<br />";
  3. print $value . '<br />';
  4. echo $value . '<br />';
  5. echo $value, '<br />';


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

Были получены следующие величины:

  1. 1,727 с
  2. 1,727 с
  3. 1,462 с
  4. 1,428 с
  5. 1,321 с


Действительно, мы видим что print может оказаться немного медленнее echo (а может и не оказаться, что демонстрируют результаты по первым двум методам). В то же время использование echo с несколькими параметрами взамен конкатенации (и одинарными кавычками вместо двойных) даёт весьма ощутимый выигрыш в производительности.

Но постойте, на самом ли деле он такой ощутимый? Давайте подсчитаем. Разница между минимальным и максимальным временем составляет 406 мс на миллион операций. То есть, как сейчас модно говорить, 406 наносекунд на одну операцию.

Что это нам даёт в масштабах — ну, скажем, «ВКонтакте»? По данным LiveInternet, ежедневно на нём просматривается 500 млн. страниц.

Сколько раз для каждой страницы вызывается echo или print? Современные успешные сайты обязательно прибегают к сколько-нибудь высокому уровню абстракции логики от представления, используя шаблоны, MVC и другие страшные слова; в результате операция вывода вызывается один раз на страницу или, как максимум, один раз для каждого смыслового блока страницы. Предположим худший вариант и оценим количество таких блоков в 10 шт. на одну страницу.

Нетрудно подсчитать, что экономия серверного времени составит в лучшем случае до 200 секунд в день, или 0,23 %. Много это или мало? Решайте сами. Только сначала подумайте, не принесёт ли оптимизация одного SQL-запроса или кэширование одного файла в несколько раз больший прирост производительности.

А я скажу, сколько времени у меня заняло решение этого вопроса:

  1. Просмотр информации в мануале — 2 минуты.
  2. Составление бенчмарка — 31 минута.
    Серия пробных экспериментов — 5 минут.
    Корректирование техники и методики тестирования — 20 минут.
    Проведение испытаний — 9 минут.
    Обработка результатов — 5 минут.
Tags:
Hubs:
+148
Comments 105
Comments Comments 105

Articles