1. 概述
- JIT (Just-In-Time) 即时编译器是 PHP8.0 中最重要的新功能之一,可以极大提高性能。
- JIT 编译器将作为扩展集成到 PHP 中 Opcache 扩展用于运行时将某些操作码直接转换为 cpu 指令。仅在启用 opcache 的情况下,JIT 才有效。
2. Opcache 扩展
Opcache 通过将 PHP脚本 预编译的字节码 存储到共享内存中来提升性能,存储预编译字节码的好外就是:省去了每次加载和解析 PHP 脚本的开销。
3. Opcache 开启 与 配置
- 文件位置:php.ini
- 开启
zend_extension = opcache
- 配置
; Determines if Zend OPCache is enabled
opcache.enable=1
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=0
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8
; The maximum number of keys (scripts) in the OPcache has table.
; Only numbers between 200 and 1000000 are allowed.
opache.max_accelerated_files=10000
- 新增
opache.jit=tracing
opache.jit_buffer_size=100M
- 常见问题 PHP扩展目录
extension_dir = "ext"
4. JIT 运行速度实战
<?php
//返回当前 Unix 时间戳的微秒数
//get_as_float 可选。当设置为 TRUE 时,规定函数应该返回一个浮点数,否则返回一个字符串。默认为 FALSE。
$start = microtime(true);//开始时间
echo "开始时间:".$start."\n";
$total = 0;
for($i=0;$i<1000000;$i++){
$total +=$i;
}
$end = microtime(true);//结束时间
echo "结束时间:".$end."\n";
echo "循环次数:".$i.",求和:".$total."\n";
$spend = ($end-$start)*1000;
echo "使用时间:".$spend. "ms";
/*
PHP7 需要10ms
PHP8 需要1ms (开启Opcache后)
*/
?>