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

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


person Sourav    schedule 10.04.2011    source источник


Ответы (2)


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

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


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

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

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


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

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

person Pascal MARTIN    schedule 10.04.2011
comment
так что это совершенно другой сценарий, чем C/C++... где мы пишем код в файле .c, компилируем в .exe и запускаем этот exe-файл! как насчет этого случая? - person Sourav; 10.04.2011
comment
Да, это совершенно другая идея: C/C++ — компилируемые языки, а PHP — скорее интерпретируемый ;;; если вы хотите скомпилировать свой код PHP в какой-то исполняемый файл, вы можете взглянуть на HipHop ( github.com/facebook/hiphop-php/wiki ) -- но обратите внимание, что это, как правило, не совсем необходимо (на самом деле я никогда не видел, чтобы кто-то использовал HipHop на рабочий сервер -- кроме фейсбука, конечно... Но так ли важен ваш сайт?) - person Pascal MARTIN; 10.04.2011
comment
нет, мне никогда не нравился Facebook :), но могу ли я использовать APC в моем PHP-коде из 13000 строк, который написан в процедурном стиле? - person Sourav; 10.04.2011
comment
было бы лучше, если бы вы просто привели простой пример того, как использовать APC - person Sourav; 10.04.2011
comment
Да, вы можете использовать APC (ваш код не имеет значения) ; просто установите расширение, отредактируйте файл php.ini, чтобы включить его, и настройте его; перезапустите Apache, чтобы изменения были учтены; и вуаля ; тебе больше нечего делать. - person Pascal MARTIN; 10.04.2011
comment
PascalMARTIN У меня есть сервер, размещенный на GoDaddy, с установленным и настроенным CentOs для моего приложения. Как я могу установить на нем APC? Он встроен? или мне нужно установить его на сервер, как на мою локальную машину? Кроме того, какие-либо статистические данные о том, насколько это на самом деле влияет на выполнение для процедурного PHP? Спасибо!! - person KillABug; 08.06.2013
comment
Кроме того, вам не обязательно запускать Apache, чтобы использовать APC, наши производственные серверы работают под управлением APC/Nginx/PHP-FPM просто плавно :) - person siliconrockstar; 30.12.2013

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

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

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

$timer_start = microtime(1);

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

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

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

person Your Common Sense    schedule 10.04.2011
comment
Пожалуйста, объясните немного больше, и было бы лучше, если бы вы могли дать PHP-код! - person Sourav; 10.04.2011
comment
Это долгая история. Короче говоря, вы должны быть уверены, что вам действительно нужен код операции. 99,99% сайтов в мире его не используют, так как он им просто бесполезен. - person Your Common Sense; 10.04.2011
comment
Это довольно смелое заявление. Большинство людей не используют APC просто потому, что они находятся на виртуальном хостинге и поэтому не могут его использовать. Но, насколько я знаю, почти все на виртуальном или выделенном хостинге используют APC. Есть множество вещей, которые не улучшат производительность ваших сайтов, но APC определенно улучшает (измеримо, только Google). - person NikiC; 10.04.2011