Php кэширование байт кода

Понимание OpCache

PHP в версии 5.5 поставляется со встроенным механизмом кэширования – OpCache, который хранит байт-код предварительно скомпилированного скрипта в памяти. Если вы знакомы с APC или Xcache, вы уже знаете, как работают такие движки. Поскольку каждый сценарий PHP компилируется во время выполнения, часть времени выполнения используется для преобразования читаемого человеком кода в код, понятный для машины. Механизм кэширования байт-кода, такой как OpCache, APC или Xcache, делает это только один раз – во время первого выполнения определенного файла PHP. Затем предварительно скомпилированный скрипт сохраняется в памяти, что должно привести к повышению производительности в ваших PHP-приложениях.

В Интернете вы легко найдете множество учебных пособий, охватывающих все этапы установки и настройки OpCache (он включен по умолчанию в 5.5, но может быть установлен как расширение в более старых версиях). Прочитайте статью ниже, чтобы найти ответы на некоторые типичные вопросы, касающиеся различных практических аспектов работы с этим конкретным механизмом кэширования.

1. Стоит ли вообще устанавливать OpCache? Какой прирост скорости я могу ожидать?

Конечно, это зависит. Если вашему серверу удается обработать входящий трафик и поддерживать низкое время отклика, вы, вероятно, не почувствуете необходимости работать над производительностью. Но на больших сайтах с большим трафиком каждый маленький шаг оптимизации может иметь значение. Реализация OpCache может позволить вам обрабатывать больше запросов в секунду и возвращать ответ быстрее, чем без механизма кэширования байт-кода. Поскольку OpCache довольно прост в установке и настройке, вы не будете тратить слишком много времени на настройку.

Читайте также:  Python отправить https запрос

Если вам нужны некоторые тесты производительности OpCache, вам непременно следует прочитать статью AppDynamics о реализации этого механизма кэширования. В своих тестах установка OpCache сократила среднее время ответа веб-сайта на 14%. Сокращение времени отклика различных действий веб-приложения варьировалось от 6% до 74%. Как объясняется в статье, различные части кода могут более или менее выиграть от реализации механизма кэширования байт-кода. Я рекомендую вам прочитать статью подробно и проверить, где вы можете получить максимальный прирост производительности.

Если вы ищете другие ресурсы, касающиеся производительности OpCache, посмотрите примеры на fideloper.com и massscale.com . Оба теста сообщили об уменьшении времени отклика примерно на 50% после установки OpCache.

2. Я уже использую APC кеш. Должен ли я перейти на OpCache?

Я думаю, тебе следует. Есть несколько преимуществ, которые могут сделать OpCache лучшим решением, чем APC.

Прежде всего, кэш APC не будет работать с новейшими версиями PHP. Он вообще не поддерживает PHP 5.5. Также не рекомендуется устанавливать его на PHP 5.4, так как сообщалось, что такая конфигурация может привести к ошибкам выполнения, которые нарушают работу всего приложения. Просто посмотрите статью в Википедии о PHP-ускорителях или этот поток переполнения стека, чтобы получить некоторые подробности.

OpCache, однако, поставляется с PHP 5.5, поэтому он определенно будет работать с этой версией PHP. Как написано в документации , он также может быть установлен с более старыми версиями PHP – от 5.2 до 5.4. Как правило, OpCache более тесно связан с самим PHP, чем другие механизмы кэширования байт-кода, что может привести к более частым обновлениям и уменьшению количества ошибок (подробности см. Здесь).

При миграции с APC на OpCache важно помнить только то, что последний не работает как механизм кэширования данных. Если вы уже внедрили APC, вы можете использовать его функции apc_add () и apc_fetch (), которые служат интерфейсом для службы кэширования данных. OpCache – это всего лишь механизм кэширования байт-кода, поэтому он не будет предлагать аналогичную функциональность. Если вы планируете перейти с APC на OpCache, не забывайте учитывать это ограничение. Имейте в виду, что если вы хотите сохранить функциональность пользовательского интерфейса APC, есть проект APCu (большое спасибо Оскару Мерине за то, что он указал на это в комментариях).

3. Как проверить, действительно ли OpCache кеширует мои файлы?

Если вы уже установили и настроили OpCache, может оказаться важным контролировать, какие файлы PHP фактически кэшируются. Весь механизм кэширования работает в фоновом режиме и является прозрачным для посетителя или веб-разработчика. Чтобы проверить его состояние, вы можете использовать одну из двух функций, предоставляющих такую ​​информацию: opcache_get_configuration () и opcache_get_status () . К счастью, есть пара подготовленных сценариев, которые извлекают все данные о конфигурации и состоянии OpCache и отображают их дружественным образом. Вам не нужно самостоятельно писать код, просто выберите один из следующих инструментов:
– Панель управления Opcache ,
– opcache-статус от Расмуса Лердорфа,
– OpCacheGUI от Питера Хордика,
– opcache-gui от Эндрю Коллингтона.

В своих проектах я использую скрипт opcache-gui, который обладает всеми необходимыми мне функциями. Чтобы проверить, работает ли механизм кэширования, просто посмотрите проценты на вкладке «Обзор» на странице opcache-gui. Если значения использования памяти и частоты попаданий больше нуля, это означает, что OpCache кэширует код PHP, а кэшированные файлы используются для обработки запросов. Чтобы увидеть список конкретных файлов PHP, которые кэшируются, просто перейдите на вкладку «Использование файлов». Просмотрите список файлов, чтобы убедиться, что файлы в ваших проектах кэшируются.

4. Есть ли какая-либо специфичная для фреймворка конфигурация, которую я должен установить?

По сути, движок OpCache должен быть прозрачен для вас, как для составителя кода. Это означает, что вы можете поместить любой код в свое приложение (которое работает с используемой версией PHP), и OpCache должен правильно его обрабатывать. Но это будет работать, только если конфигурация OpCache установлена ​​правильно. Неправильная конфигурация механизма кэширования может сломать весь ваш сайт.

Прежде всего, вероятно, в каждом типичном проекте вам нужно убедиться, что для опции opcache.use_cwd установлено значение true Включение этого параметра означает, что механизм OpCache будет просматривать полные пути к файлам, чтобы различать файлы с одинаковыми именами. Установка его в false

Существует также параметр, который важен в инструментах и ​​средах, которые используют аннотации . Если вы используете Doctrine, Zend Framework 2 или PHP Unit, не забудьте установить для параметров opcache.load_comments и opcache.save_comments значение true В результате комментарии к документации из ваших файлов также будут включены в предварительно скомпилированный код, сгенерированный OpCache. Этот параметр позволит вам работать с аннотациями без сбоев.

Если ваш проект основан на конкретной инфраструктуре или веб-приложении, всегда полезно проверить документацию на предмет каких-либо рекомендаций, касающихся конфигурации OpCache. Например, здесь приведен пример конфигурации для Moodle.

5. Я храню конфигурацию своего приложения в файле PHP. Могу ли я предотвратить его кэширование?

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

OpCache позволяет вам указать файл черного списка, который содержит все пути, которые не будут обработаны механизмом кэширования. После установки директивы opcache.blacklist_filename просто поместите правильный список файлов в указанный вами путь. Страница документации содержит несколько примеров того, как исключить определенные файлы из кэша.

6. Как я могу запустить как среду разработки, так и производственную среду на одном сервере, на котором включен OpCache?

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

К счастью, OpCache можно включить в одном проекте и отключить в другом, все на одном сервере. Для этого сначала необходимо включить OpCache на глобальном уровне, установив для директивы opcache.enable значение true php.ini Затем, если вы не хотите использовать кэширование байт-кода в одном из ваших проектов, просто отключите его, установив для этой же директивы значение false ini_set () . Поэтому сначала вам нужно включить глобальное кэширование, а затем вы можете отключить его в некоторых проектах «локально». Вы не можете сделать наоборот – включение кэширования с помощью ini_set () не допускается.

Резюме

Я надеюсь, что этот набор общих вопросов и ответов дал вам некоторую практическую информацию о том, как использовать OpCache в приложении PHP. Если у вас есть другие вопросы или комментарии по этому вопросу, не стесняйтесь размещать их ниже. Вы также можете связаться со мной через Google Plus .

Источник

Увеличьте скорость сайта, включив кэширование PHP-кода

php-omtimization

PHP кэш невероятно увеличивает скорость работы сайта. Например, если подготовка запроса занимает 1,2 секунды, после включения кэша это займет 0,6 секунды (увеличение примерно на 50%). В частности, это также существенно влияет на WordPress, поскольку он содержит много PHP-кода.

На некоторых сайтах, работающих, например, на WAMP (Apache, MySQL и PHP-пакет для Windows), кэш PHP-кода по умолчанию отключен, поэтому нам лучше проверить настройки.

Самый популярный способ сделать это – использовать OpCache – специальный модуль PHP, который выполняет кеширование кода. В PHP 5.5 и выше этот модуль уже интегрирован.

Как это работает#

OpCache обеспечивает более быстрое выполнение PHP благодаря кешированию и оптимизации скомпилированного кода. Это повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти. Каждый раз, когда запрашивается PHP-скрипт, PHP-скрипт будет анализироваться и компилироваться в байт-код, который затем выполняется в движке. Когда используется кэш байт-кода, после интерпретации и преобразования PHP-скрипта в байт-код (скомпилированный) он сохраняется в общей памяти, а последующие запросы пропускают фазы синтаксического анализа и компиляции и используют байт-код, сохраненный в памяти, сокращая время выполнения скрипта.

script-cache-scheme

Настройка#

Конфигурация в основном выполняется путем редактирования специального файла с именем php.ini.

Нахождение файла конфигурации#

Расположение зависит от системы и может быть таким, как /etc/php5/apache2/php.ini или /etc/php5/fpm/php.ini, /usr/local/lib/php.ini в Unix-подобных системах и C:\wamp\bin\php\php5.5.12\php.ini в Windows.

В WAMP есть специальный пункт меню, который открывает его.

wamp-php-ini

Кроме того, местоположение файла всегда можно узнать из информации PHP. Просто создайте файл phpinfo.php с содержанием , скопируйте его в корневой каталог веб-сервера и запустите по адресу http://localhost/phpinfo.php. Расположение находится в разделе «Configuration File (php.ini) Path» первого блока (см. рисунок ниже).

phpinfo-php-ini-location

Установка настроек#

Все настройки находятся в разделе [opcache] php.ini.

Убедитесь, что основные настройки там есть:

Другие дополнительные настройки можно оставить без изменений со значениями по умолчанию. Но иногда требуется настроить их. Итак, вот краткое описание каждого важного с рекомендуемыми значениями.

Актуальные параметры всегда можно проверить по адресуСтраница конфигурации источника OPcache и в списке всех параметров.

Перезапуск веб-сервиса#

Просто перезапустите веб-сервис (например, Apache) и PHP тоже будет перезапущен.

В WAMP это можно сделать, перезапустив Apache.

wamp-restart-apache

Проверка#

Очевидный способ проверить это – сравнить ответ сервера до и после включения кеша. Например, мы можем сделать это с помощью браузера Google Chrome.

Другой способ проверить работоспособность OpCache – создать файл opcache.php с содержимым , скопировать его в корневой каталог веб-сервера и запустить по адресу http://localhost/opcache.php. Пример результата на картинке ниже.

opcache-configuration-check

Значение opcache_enabled должно быть 1. И ниже есть статистика PHP-скриптов, которая может просмотрена, такая как общее количество и подробная информация для каждого из них.

Если производительность сайта недостаточна, можно настроить WordPress с помощью плагинов кэша.

Источник

Оцените статью