PHP8新特性解读
时间:2020-12-30 来源:互联网
PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。
PHP-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。让我们通过本文来看看这项功能对PHP脚本的速度有怎样的影响?
以下为译文:
今年年底,PHP-8即将发布。虽然这个主版本有很多新功能,例如联合类型、静态返回和弱映射等,但最令人期待的改进还是JIT编译器。
从理论上讲,JIT处理PHP脚本编译的方式能够提高应用程序的速度。但让我们来看看这种方法能否达到我们的期望。
请注意,在本文中使用的PHP-8不是最终版本。
首先,我们来编写一段运行的代码。我选择了冒泡排序,因为这是最差的排序算法,只有这种测试的时候我才能用这个排序算法。
我知道这个脚本编写的并不是很好,尤其是中间那个讨厌的数组。我知道我可以生成一个随机数组。我也知道我可以从文件中读取这个数组。但是,我只想要一个不需要考虑其他因素的非常慢的冒泡算法。我不希望这个基准测试中出现任何额外的干扰。
首先,我们在当前的PHP 7.4版本中运行脚本:
docker container run --rm -v $(pwd):/script/ php:7.4 php /script/bubble.php
运行100次得到的平均时间为0.10253500938416秒——还不错。
现在我们在PHP-8中运行,先不要激活JIT。
docker container run --rm -v $(pwd):/script/ martinpham/php8:fpm-extra-alpine php /script/bubble.php
同样运行100次的平均时间为0.098223924636841秒。老实说,这个提升不怎么明显。
下面,我们来测试期待已久的JIT:
docker container run --rm -v $(pwd):/script/ keinos/php8-jit php /script/bubble.php
平均运行时间为0.053637981414795秒!JIT确实很惊喜!对于像我这样非常关注执行时间的人来说,这简直就是一个福音。虽然单看数字你没什么感觉(仅改善了0.04458594322秒),但换算成百分比后,就能更好地看清优势了:45.39%。
我想从更多的角度来对比,因此我使用了2009年的PHP-5.3版本来运行这段代码。
docker container run --rm -v $(pwd):/script/ php:5.3 php /script/bubble.php
平均花费了0.64574003219604秒。比激活了JIT的PHP-8满了0.5921020508(下降了-1,103.88)!我的天,2009年的时候我们是怎么过来的?
注意:
我选择的脚本只有一个纯粹的冒泡算法。当然,你可以尝试其他代码,例如旅行推销员问题或二叉树。结果应该都差不多。
正如我在文中提到的那样,这个基准测试运行的PHP-8版本不是最终版本,因此可能最终的发行版会增添其他改进。
我在测试结果中保留了很多位小数,虽然看着很罗嗦,但我只是想尽可能做到精确。
在基准测试中,我使用keinos和martinpham的docker镜像。其实还有很多其他工具,你可以选择自己喜欢的尝试一下。
我运行测试的笔记本电脑的配置为:Linux Manjaro、3 GHz Intel Core i5、32 GB RAM。在其他配置下,具体的数字可能会有所不同,但是我相信改进结果都很相似。
JIT 带来的性能提升对整个语言使用场景的扩展及语言生态发展的支持,可以加速语言的发展(更多人可以参与进来),同时也可以减少目前使用 C 开发容易出现的内存管理、溢出等问题。很多PHPer把自己局限在一个角落里面,其实大家应该去拥抱PHP带来的变化与生态,Swoole解决了IO密集场景问题,JIT解决了计算密集场景问题,未来PHP的发展不会差到哪里去的;这套教程针对那些1-6年PHP开发,助大家顺利进阶为一名优秀的CTO、架构师!PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。
-
剑与远征启程角色强度表英雄培养排行一览 2024-11-25
-
究竟什么是世界时区时间api接口调用 2024-11-25
-
保卫萝卜4法老归来第69关金萝卜攻略 2024-11-25
-
保卫萝卜4法老归来第68关金萝卜攻略 2024-11-25
-
一起来了解下生肖配对api接口调用 2024-11-25
-
保卫萝卜4法老归来第66关金萝卜攻略 2024-11-25