2020年末,PHP官方停止了对PHP7 版本的迭代开发了,7时代版本定格在了7.4这个版本。
随之,在2020年感恩节迎来了 PHP8.0,官方发布8在7的基础上有了很大的改进,性能上更有了质的飞跃。其中最明显功能是8中增加了JIT,官方发布的PHP Micro 基准测试结果:如果PHP 8 开启了JIT,性能比PHP 7.4 stable提升了92%,是旧版本PHP 5.6 的5倍,性能真是杠杠的啊,真对得起“PHP 是世界上最好的语言”。
PHP 8 相较于 PHP 7 还是增加了不少令人兴奋的特性
match
Nullsafe(空安全运算符) 链式调用
字符串与数字的比较逻辑
太空船操作符(组合比较符):用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1
define 定义常量数组
注解
PHP 8 与 JIT 让性能起飞吧
我们看下JIT编译原理图(https://www.laruence.com/2020/06/27/5963.html)这篇博文是 Laruence(PHP开发组核心成员, Zend顾问, PHP7及PHP8 JIT核心作者. Yaf等开源项目作者)。
说JIT之前,我们了解下 Zend Opcache
Opcache:解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字节码(Operate Code),从而大大提高PHP的执行效率
检查opcodes是否缓存
zend compiler编译器进行编译生成opcodes
optimizer优化器生成优化后的opcodes
把优化后的opcodes放入opcodes cache缓存
经过zend vm虚拟机生成opcodes handlers处理程序
送入x86 cpu架构进行执
2. JIT 编译原理
检查opcodes是否缓存
zend compiler编译器进行编译生成opcodes
optimizer优化器生成优化后的opcodes,并把优化后的opcodes放入opcodes cache缓存
jit 编译器把optimized opcodes 再次编译成汇编机器码machine codes
检查是否开启jit 引擎
如果开启了jit 引擎则直接读取机器码中的jit buffer代码片段
送入x86 cpu 架构进行执行
3. JIT 引擎开启
通过浏览器可以看到JIT 已经开启成功。
4. 测试JIT 功能
综上可以看到在PHP 8开启opcache 和 jit 的同时,整个计算过程的耗时只有1.17秒左右;而PHP 7只开启opcache的情况下耗时是10.79秒;PHP 8未开启opcache 未开启jit 耗时是7.79秒左右;通过比较 PHP 8在开启jit 扩展的同时,性能确实比以前提升了好几倍。
相信PHP 8 在后续的迭代版本,性能、效率、安全会越来越好,也相信PHP会成为世界上最好的语言!
领取专属 10元无门槛券
私享最新 技术干货