Я искал в Интернете и узнал, что PHP-код можно скомпилировать для повышения производительности. Но как это сделать? Могу ли я компилировать как процедурный, так и объектно-ориентированный код PHP?
Что такое кеш байт-кода и как его использовать в PHP?
Ответы (2)
Основная идея при выполнении PHP-скрипта заключается в двух шагах:
- Во-первых: код PHP, написанный в виде обычного текста, компилируется в коды операций.
- Затем: эти коды операций выполняются.
Если у вас есть один PHP-скрипт, пока он не изменен, коды операций всегда будут одинаковыми; поэтому выполнение фазы компиляции каждый раз, когда должен выполняться скрипт, является пустой тратой процессорного времени.
Чтобы предотвратить эту избыточную компиляцию, есть некоторый механизм кэширования кода операции, который вы можете использовать.
Как только PHP-скрипт будет скомпилирован в коды операций, они будут храниться в ОЗУ и напрямую использоваться из памяти при следующем выполнении скрипта; предотвращая повторную компиляцию.
Кэш кода операции, который используется чаще всего, называется APC — альтернативный кэш PHP:
- См. PECL, чтобы загрузить расширение APC.
- А вот руководство
После того, как APC установлен и настроен должным образом, вам не нужно ничего изменять в вашем PHP-коде: APC кэширует коды операций, и это все — процесс полностью невидим для вашего приложения.
Но как это сделать?
Легко.
Прежде всего, вам нужно выполнить профилирование, чтобы убедиться, что синтаксический анализ кода является узким местом вашего сайта, а также все другие очевидные проблемы, такие как неоптимизированное хранилище данных, медленные алгоритмы, интеллектуальный анализ данных и сетевые звонки были оптимизированы.
Самый простой способ определить, нужен ли вам кэш кода операции, — просто поместить эту строку в самый верх вашей наиболее часто используемой страницы.
$timer_start = microtime(1);
и эта строка в самом конце:
echo "Generated in ".(round((microtime(1) - $timer_start),4))." sec.";
если время больше 0.01
, у вас есть другие вещи, которые нужно оптимизировать в первую очередь, потому что вы не заметите никакого эффекта от кеша кода операции.