PHP 8.3 的 JIT 编译器默认不开启,需手动配置 opcache.enable=1、opcache.enable_cli=1 和 opcache.jit=1255 等参数,并确保非 ZTS 构建、缓冲区足够大(如 256M),且仅对纯计算密集型代码有效。

PHP 8.3 的 JIT 编译器默认仍**不开启**,和 PHP 8.0–8.2 一样,它必须手动配置 OPcache 相关参数才能生效。它不是“装上就跑”,而是一个需要明确启用、合理调参、且只对特定负载有效的运行时优化机制。
确认 PHP 8.3 是否支持 JIT
先验证基础环境是否满足:
-
php -v输出中必须包含8.3.x,且不含ZTS(线程安全版)——JIT 在 ZTS 模式下被强制禁用 -
php -i | grep "opcache.enable"必须显示opcache.enable => On,否则 JIT 完全不会启动 -
php -r "var_dump(defined('PHP_JIT') && PHP_JIT);"返回bool(true)表示 JIT 内核已编译进 PHP,但不等于已启用
php.ini 中必须设置的三个关键项
JIT 不是独立开关,它完全依赖 OPcache 的配置组合。缺一不可:
-
opcache.enable=1:Web SAPI(如 Apache、FPM)下启用 OPcache -
opcache.enable_cli=1:CLI 模式下也启用(否则php script.php不走 JIT) -
opcache.jit=1255:这是 PHP 8.3 推荐的稳定值,比旧版1235更激进(启用 AVX 指令、全局寄存器分配、跟踪模式、全量优化) -
opcache.jit_buffer_size=256M:缓冲区至少设为100M,PHP 8.3 对 JIT 内存更敏感,64M可能导致 JIT 自动降级或静默失效
注意:opcache.jit=0 或留空 = 禁用;opcache.jit=1 是极保守模式(仅函数级),基本无实际收益。
立即学习“PHP免费学习笔记(深入)”;
验证 JIT 是否真正在工作
光看配置不等于生效。运行以下脚本检查 JIT 运行时状态:
php -r "var_dump(opcache_get_status()['jit']);"
输出中必须同时满足:
"enabled" => true"on" => true-
"buffer_free"值明显小于"buffer_size"(说明有代码已被 JIT 编译)
如果 "enabled" 为 false,常见原因是:opcache.jit_buffer_size 太小、PHP 是 ZTS 构建、或没重启 FPM/HTTPD 导致配置未加载。
JIT 在 PHP 8.3 中真正起效的场景有限
别指望它让 Laravel 请求快 30%。JIT 主要加速的是「纯计算密集型、反复执行、无 I/O 阻塞」的代码块:
- 数学运算循环(如矩阵乘法、加密哈希批量计算)
- 递归算法(斐波那契、树遍历等深度调用)
- 图像像素处理、音频采样转换等底层数值操作
对典型 Web 应用(DB 查询 + 模板渲染 + HTTP 处理),JIT 带来的提升常低于 5%,甚至因 JIT 编译开销反而略慢。它不是通用加速器,而是针对特定瓶颈的手术刀。
最易被忽略的一点:JIT 编译发生在「第二次及之后的请求」,首次请求永远走解释执行。如果你只测单次 CLI 脚本或短命请求,根本测不出 JIT 效果。



















