Подтвердить что ты не робот

Что такое кеш байт-кода и как его использовать в PHP?

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

4b9b3361

Ответ 1

Основная идея при выполнении PHP script выполняется в два этапа:

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


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

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

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


Кэш опкодов, который используется больше всего, APC - альтернативный кэш PHP:

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

Ответ 2

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

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

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

$timer_start = microtime(1);

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

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

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