OpCache: что это, настройка и ускорение PHP | Глоссарий FREEHOSTING

OpCache

PHP Opcode Cache
OpCache — OpCache — встроенный кеш скомпилированного PHP-байткода. Хранит готовый opcode каждого скрипта в shared memory, чтобы интерпретатор не парсил и не компилировал PHP-файлы при каждом запросе. Базовый инструмент ускорения сайтов на WordPress, Битрикс и Laravel.

Определение простыми словами

Когда PHP получает запрос, он читает .php-файлы, парсит код и компилирует во внутренние инструкции (opcode), и только потом выполняет. OpCache сохраняет результат компиляции в общей памяти процесса PHP. Следующий запрос пропускает чтение и парсинг — берёт готовый opcode и сразу выполняет. Это снижает CPU и TTFB в 2–4 раза.

OpCache входит в стандартную поставку PHP с версии 5.5 и включён по умолчанию в большинстве дистрибутивов. Тонкая настройка касается размера памяти, максимального числа файлов и режима валидации.

Сравнение

Кеш Что хранит Уровень Совместимость
OpCache PHP-байткод (opcode) Интерпретатор PHP 5.5+
APCu Произвольные данные Приложение PHP 7+
Object cache Объекты приложения Приложение WP, Drupal, Magento
Page cache Готовый HTML Web-сервер Nginx, Varnish

Кейсы использования

  • WordPress на VPS: включение OpCache снижает TTFB админки с 800 мс до 200 мс без изменения кода.
  • Laravel в проде: php artisan config:cache + OpCache + preload-файл дают двукратный прирост RPS.
  • 1C-Битрикс: OpCache + APCu закрывают рекомендации производительности из «Проверки системы».
  • Негативный кейс: на проде включают opcache.validate_timestamps=1 с интервалом 0 — кеш сбрасывается каждый раз, эффект пропадает.
  • Негативный кейс: размер opcache.memory_consumption мал, и часть файлов не помещается. Появляются «out of memory» в логе и сервер теряет производительность скачками.

Технические детали

# Проверить, включён ли OpCache
php -i | grep -i opcache.enable

# Посмотреть статистику
php -r 'print_r(opcache_get_status(false));'

# Конфиг для прода: /etc/php/8.2/fpm/conf.d/10-opcache.ini
# opcache.enable=1
# opcache.memory_consumption=256
# opcache.max_accelerated_files=20000
# opcache.validate_timestamps=0
# opcache.revalidate_freq=0
# opcache.preload=/var/www/preload.php

# Сброс OpCache без рестарта PHP-FPM
cachetool opcache:reset --fcgi=/run/php/php-fpm.sock

Частые вопросы

Сколько памяти выделять OpCache?

Для типового WordPress — 128–256 МБ. Для Битрикс — 256–512 МБ. Для крупного Laravel-приложения с тысячами файлов и preload — от 512 МБ. Контролируйте usage через opcache_get_status и доводите до 70–80% занятости.

Чем OpCache отличается от APCu?

OpCache хранит скомпилированный PHP-байткод и работает прозрачно для приложения. APCu — это user-space кеш для произвольных данных приложения: настройки, результаты запросов, объекты. Часто используются вместе.

Нужно ли отключать OpCache на dev-машине?

Не отключать, а включить валидацию изменений: opcache.validate_timestamps=1 и opcache.revalidate_freq=0. Так разработчик видит изменения мгновенно, но кеш всё равно работает.