Статьи

Оптимизация скорости PHP

Натан Вонг утверждает, что одинарные кавычки быстрее, чем двойные в PHP.

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

Причина такого ускорения заключается в том, что когда компилятор PHP встречает строковую константу, начинающуюся с двойной кавычки, сама строка должна быть проанализирована, а специальные символы (такие как $ и {) имеют специальные значения. Напротив, если строковая константа начинается с одиночной кавычки, только обратная косая черта имеет особое значение, и поэтому PHP не нужно беспокоиться о замене переменных и выражений, встроенных в строку.

Результаты Натана указывают приблизительно на 16% ускорения при использовании одинарных кавычек в его тестировании.

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

Интересно, однако, что Джон помещает проблему «одинарные кавычки против двойных кавычек» в приложение под названием «Бесполезные оптимизации» (внизу).

«var =». $ var быстрее, чем «var = $ var»
Раньше это было верно в PHP 4.2 и ранее. Это было исправлено в PHP 4.3. Примечание (22 июня 2004 г.): очевидно, что исправление 4.3 уменьшило накладные расходы, но не полностью. Однако я считаю, что разница в производительности незначительна.

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

Я бы порекомендовал вам прочитать статью, так как она отлично читается и хорошо написана.

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

Еще один момент, который необходимо учитывать при оптимизации кода, заключается в том, что вам необходимо сравнить затраты (в ваше время или время программиста) на выполнение оптимизации со стоимостью обновления серверного оборудования. Аппаратное обеспечение сравнительно дешево.

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

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