Что такое кэш байт-кода и как его использовать в PHP? - PullRequest
22 голосов
/ 10 апреля 2011

Я искал в Интернете и узнал, что код PHP может быть скомпилирован для повышения производительности. Но как это сделать? Могу ли я скомпилировать как процедурный, так и объектно-ориентированный код PHP?

Ответы [ 2 ]

38 голосов
/ 10 апреля 2011

Основная идея при выполнении сценария PHP состоит из двух шагов:

  • Во-первых: код PHP, написанный в виде простого текста, скомпилирован в коды операций
  • Затем: эти коды операций выполняются .


Если у вас есть один PHP-скрипт, если он не изменен, коды операций всегда будут одинаковыми; таким образом, выполнение фазы компиляции каждый раз, когда должен выполняться скрипт, является пустой тратой процессорного времени.

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

После того, как скрипт PHP был скомпилирован в коды операций, они будут храниться в ОЗУ и напрямую использоваться из памяти при следующем запуске скрипта; предотвращение повторной компиляции.


Наиболее часто используемый кэш кода операции - APC - альтернативный кэш PHP :

После того, как APC правильно установлен и настроен, вам не нужно ничего менять в своем PHP-коде: APC будет кэшировать коды операций, и это все - процесс полностью невидим для вашего приложения.

0 голосов
/ 10 апреля 2011

а как это сделать?

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

Самый простой способ определить, нужен ли вам кэш кода операции или нет, просто поместить эту строку в самый верх вашей наиболее часто используемой страницы

$timer_start = microtime(1);

и эта строка в самом конце:

echo "Generated in ".(round((microtime(1) - $timer_start),4))." sec.";

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

...