Сначала о грустном: PHP JIT не превратит твой код из картошки в Ferrari. Если твои скрипты грузят базу, дергают API и щёлкают массивы, как тараканы, JIT особо не поможет. Но если ты ковыряешь тяжёлые вычисления, научные штуки или что-то, что реально можно превратить в машинный код — тогда да, он может дать прокачку.
PHP JIT появился в PHP 7.4 и с тех пор вызывает кучу мифов. "С ним PHP летает!" — да, в твиттере это звучит круто, но в реальности большинство проектов JIT видит только на бенчмарках, а не в проде.
Что такое PHP JIT и как он работает
Проще говоря: JIT компилирует твой PHP-код в машинный прямо во время работы скрипта. Нет, это не магия. Просто PHP раньше читает твой код, понимает что делать и выполняет инструкции интерпретатором. JIT берёт код, прогоняет через компилятор и выдаёт байткод, который процессор понимает напрямую.
И что? Это экономит кучу циклов на интерпретацию, особенно если функции дергаются миллион раз. Но если у тебя веб-приложение типа CRM, где 80% времени уходит на базу или сетевые запросы — JIT тебе похер. Машинный код летит, а база всё равно тормозит.
Как включить PHP JIT
Даже если ты фанат оптимизации, сначала проверь php.ini. Там есть директива opcache.jit_buffer_size. Без неё JIT работать не будет. Пример минималки:
opcache.jit_buffer_size=100M
100 мегабайт — стандарт для средних проектов. Можно больше, можно меньше, зависит от того, сколько у тебя дерьма в коде и сколько памяти на сервере.
И ещё момент: JIT включается автоматически, когда есть OPcache. То есть тебе не надо в коде вставлять какие-то магические функции. Но помни — если постоянно меняешь код во время выполнения (например, динамически генерируешь функции), JIT тупит и эффекта почти нет.
Где JIT реально помогает
- тяжёлые вычисления типа математики на больших массивах;
- криптография, шифрование;
- обработка изображений или видео в памяти;
- численные алгоритмы, всякие FFT, линейная алгебра.
Если ты думаешь, что JIT ускорит обычный сайт и парой тысяч пользователей — забудь.
Как мониторить эффективность
Просто вставлять opcache.jit и ждать чуда — идиотизм. Есть Xdebug, Blackfire и профайлеры, которые реально показывают, что ускорилось. Ставишь профайл, смотришь, какие функции реально дергаются миллионы раз, и уже там JIT работает.
Ещё момент: не думай, что после включения JIT все твои баги исчезнут. Он не исправляет архитектурные косяки. Если твой код кривой, JIT просто ускорит его кривость.
Лайфхаки
- Не меняй код динамически во время выполнения. JIT тупит.
- Не жди чудес на сайтах с обычной нагрузкой. JIT — для вычислений, а не для CRUD.
- Настрой буфер нормально. Если мало — JIT будет кряхтеть.
- Профайль. Без профайла ты просто крутил ручку, не зная, к чему она.
Итог
PHP JIT — инструмент, а не панацея. Он реально может ускорить вычислительные тяжёлые скрипты, но не заменит базу, сеть или кривой код. Используй его там, где есть смысл, иначе будешь смотреть на терминал и думать: "Чёрт, а чего я ждал?"
0 комментариев