- Понимание OpCache
- 1. Стоит ли вообще устанавливать OpCache? Какой прирост скорости я могу ожидать?
- 2. Я уже использую APC кеш. Должен ли я перейти на OpCache?
- 3. Как проверить, действительно ли OpCache кеширует мои файлы?
- 4. Есть ли какая-либо специфичная для фреймворка конфигурация, которую я должен установить?
- 5. Я храню конфигурацию своего приложения в файле PHP. Могу ли я предотвратить его кэширование?
- 6. Как я могу запустить как среду разработки, так и производственную среду на одном сервере, на котором включен OpCache?
- Резюме
- Увеличьте скорость сайта, включив кэширование PHP-кода
- Как это работает#
- Настройка#
- Нахождение файла конфигурации#
- Установка настроек#
- Перезапуск веб-сервиса#
- Проверка#
Понимание OpCache
PHP в версии 5.5 поставляется со встроенным механизмом кэширования – OpCache, который хранит байт-код предварительно скомпилированного скрипта в памяти. Если вы знакомы с APC или Xcache, вы уже знаете, как работают такие движки. Поскольку каждый сценарий PHP компилируется во время выполнения, часть времени выполнения используется для преобразования читаемого человеком кода в код, понятный для машины. Механизм кэширования байт-кода, такой как OpCache, APC или Xcache, делает это только один раз – во время первого выполнения определенного файла PHP. Затем предварительно скомпилированный скрипт сохраняется в памяти, что должно привести к повышению производительности в ваших PHP-приложениях.
В Интернете вы легко найдете множество учебных пособий, охватывающих все этапы установки и настройки OpCache (он включен по умолчанию в 5.5, но может быть установлен как расширение в более старых версиях). Прочитайте статью ниже, чтобы найти ответы на некоторые типичные вопросы, касающиеся различных практических аспектов работы с этим конкретным механизмом кэширования.
1. Стоит ли вообще устанавливать OpCache? Какой прирост скорости я могу ожидать?
Конечно, это зависит. Если вашему серверу удается обработать входящий трафик и поддерживать низкое время отклика, вы, вероятно, не почувствуете необходимости работать над производительностью. Но на больших сайтах с большим трафиком каждый маленький шаг оптимизации может иметь значение. Реализация OpCache может позволить вам обрабатывать больше запросов в секунду и возвращать ответ быстрее, чем без механизма кэширования байт-кода. Поскольку OpCache довольно прост в установке и настройке, вы не будете тратить слишком много времени на настройку.
Если вам нужны некоторые тесты производительности 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 кэш невероятно увеличивает скорость работы сайта. Например, если подготовка запроса занимает 1,2 секунды, после включения кэша это займет 0,6 секунды (увеличение примерно на 50%). В частности, это также существенно влияет на WordPress, поскольку он содержит много PHP-кода.
На некоторых сайтах, работающих, например, на WAMP (Apache, MySQL и PHP-пакет для Windows), кэш PHP-кода по умолчанию отключен, поэтому нам лучше проверить настройки.
Самый популярный способ сделать это – использовать OpCache – специальный модуль PHP, который выполняет кеширование кода. В PHP 5.5 и выше этот модуль уже интегрирован.
Как это работает#
OpCache обеспечивает более быстрое выполнение PHP благодаря кешированию и оптимизации скомпилированного кода. Это повышает производительность PHP, сохраняя байт-код предварительно скомпилированного скрипта в общей памяти. Каждый раз, когда запрашивается PHP-скрипт, PHP-скрипт будет анализироваться и компилироваться в байт-код, который затем выполняется в движке. Когда используется кэш байт-кода, после интерпретации и преобразования PHP-скрипта в байт-код (скомпилированный) он сохраняется в общей памяти, а последующие запросы пропускают фазы синтаксического анализа и компиляции и используют байт-код, сохраненный в памяти, сокращая время выполнения скрипта.
Настройка#
Конфигурация в основном выполняется путем редактирования специального файла с именем 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 есть специальный пункт меню, который открывает его.
Кроме того, местоположение файла всегда можно узнать из информации PHP. Просто создайте файл phpinfo.php с содержанием , скопируйте его в корневой каталог веб-сервера и запустите по адресу http://localhost/phpinfo.php. Расположение находится в разделе «Configuration File (php.ini) Path» первого блока (см. рисунок ниже).
Установка настроек#
Все настройки находятся в разделе [opcache] php.ini.
Убедитесь, что основные настройки там есть:
Другие дополнительные настройки можно оставить без изменений со значениями по умолчанию. Но иногда требуется настроить их. Итак, вот краткое описание каждого важного с рекомендуемыми значениями.
Актуальные параметры всегда можно проверить по адресуСтраница конфигурации источника OPcache и в списке всех параметров.
Перезапуск веб-сервиса#
Просто перезапустите веб-сервис (например, Apache) и PHP тоже будет перезапущен.
В WAMP это можно сделать, перезапустив Apache.
Проверка#
Очевидный способ проверить это – сравнить ответ сервера до и после включения кеша. Например, мы можем сделать это с помощью браузера Google Chrome.
Другой способ проверить работоспособность OpCache – создать файл opcache.php с содержимым , скопировать его в корневой каталог веб-сервера и запустить по адресу http://localhost/opcache.php. Пример результата на картинке ниже.
Значение opcache_enabled должно быть 1. И ниже есть статистика PHP-скриптов, которая может просмотрена, такая как общее количество и подробная информация для каждого из них.
Если производительность сайта недостаточна, можно настроить WordPress с помощью плагинов кэша.