外国科技媒体 Phoronix 发布了针对 PHP 8 的性能基准测试报告。由于 PHP 8 Alpha1 大约要到6月中旬才发布,所以 Phoronix 从 PHP 8 最新的 Git 代码(截至5月底)构建了用于测试的版本。PHP 8 重要新特性除了新的 JIT 编译器,还包括新的静态返回类型、union types 2.0(联合类型)和 attributes(属性)等。
用于参考对比的版本包括:PHP 7.4.6, 7.3.18, 7.2.31, 7.1.33, 7.0.33, 5.6.39, 5.5.38 和 5.4.44,以及启用了 JIT (Just In Time) 的 PHP 8。
所有受测试的版本都是在相同系统中使用相同的编译器和 PHP 配置文件以相同的方式进行构建,测试环境如下:
测试结果如下:
上图显示了使用 PHPbench 测试各版本 PHP 的性能结果。可以看到,从 PHP 7.4 stable 到 PHP 8 有小幅度改进,大约是 7% 的提升,但如果 PHP 8 启用了 JIT,性能改进可以说是非常明显,比 PHP 7.4 stable 提升了 92%。至于更旧的版本,PHP 8 with JIT 的性能是 PHP 5.4 的 5 倍。
上图是各版本 PHP Micro 基准测试的结果,通过一些 PHP 自带的内置测试,可以看到 PHP 8.0 的速度比已经很快的 PHP 7.4 略有提高,而启用 JIT 支持后,其速度更是碾压全场。
上图的测试结果显示,在使用 Phoronix Test Suite Self Tests 进行测试的过程中,无论是否开启 JIT,PHP 8 的性能与 PHP 7 的成绩都没有明显的改进,主要是遇到了 I/O 瓶颈,所以总体上没有产生太大的差异。
同样的,在渲染测试和合并测试方面,启用 JIT 的 PHP 8 没有产生明显的优势,不过与旧版本 PHP 5 相比,PHP 8 的性能有了显著的提升。
上图是综合了各测试结果的评分数据对比,就目前的开发状态来看,PHP 8.0 的速度是 PHP 5.4-5.6 的 3 倍左右,启用 JIT 后,就变成了 4 倍左右的差距。
从数据来看,PHP 8.0 是一个相当值得期待的版本,无论是性能方面的提升还是语言特性的增加。
详细测试结果查看 https://www.phoronix.com/
头两个测试,都是PHP源代码自带的两个用于测试PHP引擎计算性能的脚本.
php-src/Zend/bench.php
php-src/Zend/micro_bench.php
跟微服务没有任何关系.
总结就是:
对于计算密集的操作,JIT牛逼.
对于非计算密集,或者不好进行JIT优化的操作,JIT鸡肋.
PHP的yield实现者,PHP的核心开发者,PHPStorm开发者Nikita Popov,
他在2012年就已经协作一篇长文来介绍,不过估计也没几个人看得懂.
Cooperative multitasking using coroutines (in PHP!)
http://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html
https://www.laruence.com/2015/05/28/3038.html (鸟哥整理的翻译)
有些老外看懂了,直接就去搞了,比如AMP这个PHP协程框架.
可以看看它的非阻塞HTTP客户端写法:
try {
$request = new Request("https://amphp.org/");
$response = yield $http->request($request);
if ($response->getStatus() !== 200) {
throw new HttpException;
}
} catch (HttpException $e) {
// handle error
}