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

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

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

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

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

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

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

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

  • См. В разделе PECL для загрузки расширения APC
  • И вот его руководство

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

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

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

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

$timer_start = microtime(1); 

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

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

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