首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

闲谈PHP8与Jit

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会成为世界上最好的语言!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230110A079M400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券