Ответ
OPcache (ранее Zend Optimizer+) — это встроенное в ядро PHP расширение для кеширования скомпилированного байт-кода. Его основная задача — радикально повысить производительность PHP-скриптов.
Как это работает:
- При первом запросе PHP компилирует исходный код (
*.phpфайл) в байт-код (opcodes). - OPcache сохраняет этот скомпилированный байт-код в общей памяти (shared memory).
- При последующих запросах к тому же скрипту PHP использует готовый байт-код из памяти, пропуская этапы чтения с диска и компиляции.
Ключевые настройки в php.ini:
zend_extension=opcache.so ; или opcache.dll на Windows
opcache.enable=1
opcache.memory_consumption=128 ; Выделяемая память под кеш (в МБ)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2 ; Как часто проверять файлы на изменения (в секундах)
opcache.preload=/path/to/preload.php ; Предзагрузка критических классов
Практическое значение: Без OPcache фреймворки вроде Laravel или Symfony работали бы неприемлемо медленно, так как при каждом запросе компилируются сотни файлов. OPcache — обязательный компонент для production-окружения. Для разработки opcache.revalidate_freq часто ставят в 0, а opcache.validate_timestamps включают, чтобы изменения в коде применялись сразу.
Ответ 18+ 🔞
А, OPcache! Ну это же, ёпта, святое дело, без него сейчас нихуя не работает. Представь себе: каждый раз, когда к твоему скрипту прилетает запрос, PHP начинает этот файл с диска читать, потом в байт-код компилировать... Это ж пиздец как долго, особенно если у тебя там фреймворк жирный!
А с OPcache история меняется кардинально, я тебе щас объясню на пальцах, без этой вашей заумщины.
Как эта штука, блядь, работает, если по-человечьи:
- Первый раз. Приходит какой-нибудь юзер, запрашивает
index.php. PHP, сука, в поте лица работает: файл нашёл, прочитал, разобрал, в байт-код превратил (это opcodes) и только потом выполнил. Но заодно — схоронил этот самый скомпилированный байт-код у себя в оперативке, в специальном углу. - Все последующие разы. Прилетает второй, десятый, тысячный юзер на тот же
index.php. И тут PHP такой: «А, ебушки-воробушки, да я эту хрень уже компилировал! Чего париться-то?» И просто достаёт готовый байт-код из памяти и сразу выполняет. Ни диска, ни компиляции — одна чистый перформанс, овердохуища скорости!
Теперь про настройки в php.ini. Тут главное — не накосячить, а то будет тебе хитрая жопа вместо ускорения.
zend_extension=opcache.so ; На винде будет opcache.dll, не перепутай, а то нихуя не заработает
opcache.enable=1 ; Само собой, включаем эту полезную функцию, а то какой смысл?
opcache.memory_consumption=128 ; Вот это важный пункт! Сколько оперативки под кеш откушаем. Поставишь мало — кеш быстро заполнится и полезные скрипты из него вылетят, придётся компилировать заново. Ставь с запасом, но без фанатизма.
opcache.max_accelerated_files=10000 ; Сколько файлов максимум можем закешировать. Для среднего проекта хватит.
opcache.revalidate_freq=2 ; А вот это, чувак, тонкий момент. Он определяет, как часто PHP будет проверять, не изменился ли исходный файл. Раз в 2 секунды в данном случае. На продакшене — норм. Настроил и забыл.
opcache.preload=/path/to/preload.php ; Фишка посерьёзнее. Ты можешь заранее, при старте PHP, загрузить в кеш самые важные классы (например, ядро фреймворка). Тогда они будут в памяти *всегда* и первый запрос будет быстрым. Но если накосячить с путями — весь сервак **накроется медным тазом** при старте.
А теперь суровая правда жизни. Без OPcache любой современный фреймворк — Laravel, Symfony, Yii — это просто пизда рулю. Они же состоят из сотен, а то и тысяч файлов. Представь: каждый запрос — компиляция этой охапки. Это же терпения ноль, ебать! Поэтому на боевом сервере OPcache — это не опция, а обязательное условие, как воздух.
Для разработки, правда, его обычно настраивают иначе, чтобы не бегать каждый раз перезагружать PHP, когда код поправил. Выставляют opcache.revalidate_freq=0 и включают opcache.validate_timestamps. Тогда PHP будет проверять изменения в файлах при каждом запросе, и правки применятся сразу. Ну, скорость, конечно, будет не та, но зато удобно.