PHP7还没学明白,PHP8就要来了, 能有多快?[通俗易懂]

PHP7还没学明白,PHP8就要来了, 能有多快?

大家好,又见面了,我是全栈君。

点击上方“ 码农编程进阶笔记 ”,选择“置顶或者星标”

文末有干货,每天定时与您相约!

PHP7还没学明白,PHP8就要来了, 能有多快?[通俗易懂]PHP-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。让我们通过本文来看看这项功能对PHP脚本的速度有怎样的影响?

以下为译文:

今年年底,PHP-8即将发布。虽然这个主版本有很多新功能,例如联合类型、静态返回和弱映射等,但最令人期待的改进还是JIT编译器。

从理论上讲,JIT处理PHP脚本编译的方式能够提高应用程序的速度。但让我们来看看这种方法能否达到我们的期望。

请注意,在本文中使用的PHP-8不是最终版本。

首先,我们来编写一段运行的代码。我选择了冒泡排序,因为这是最差的排序算法,只有这种测试的时候我才能用这个排序算法。

<?php
function bubble_sort($array)
{
  $start = microtime(true);
    do
    {
        $sw = false;
        for($i = 0, $size = count($array) - 1; $i < $size; $i++)
        {
            if( $array[$i] > $array[$i + 1] )
            {
                list( $array[$i + 1], $array[$i] ) =
                        array($array[$i], $array[$i + 1]);
                $sw = true;
            }
        }
    }
    while($sw);
$end = microtime(true);
return $end - $start;
}
$array = array(1000, -202, 3, 0, 2, 77, 5, -1, 4, 34, -203, 1, 0.5 , -3, 0.88,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -201,
 4000, 444, 0.99, -44, 4, 454443, -44444, 23, -201,
 5000, 444, 0.99, -44, 4, 4553, -4, 253, -201,
 6000, 444, 0.99, -44, 4, 443, -4, 2.3, -2.01,
 39000, 444, 0.99, -44, 4, 53, -4, 23, -201,
 309900, 444, 0.99, 23, 123, 453, -4, 23, -201,
 309900, 444, 0.99, -4.14, 4, 453, -4, 23, -201,
 309900, 444, 0.99, -4.44, 4, 453, -4, 23, -201,
 30500, 1144, 0.99, -4.4, 4, 453, -4, 23, -201,
 -3000, -444, 0.99, -44, 4, 453, -4, 23, -1,
 3000, 424, 0.19, -44, 4, 453, -4, 23, -21,
 300, 454, 0.99222, -44, 4, 453, -4, 23, -20.1,
 301110, 4442, 0.991, -44, 4, 453, -4, 2.443, -201,
 3033300, 33444, 0.49, -44, 4, 453, -4, 2.4443, -2010000
);
echo "\n";
echo bubble_sort($array);
echo "\n";
?>

我知道这个脚本编写的并不是很好,尤其是中间那个讨厌的数组。我知道我可以生成一个随机数组。我也知道我可以从文件中读取这个数组。但是,我只想要一个不需要考虑其他因素的非常慢的冒泡算法。我不希望这个基准测试中出现任何额外的干扰。

首先,我们在当前的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年的时候我们是怎么过来的?PHP7还没学明白,PHP8就要来了, 能有多快?[通俗易懂]

注意:

  • 我选择的脚本只有一个纯粹的冒泡算法。当然,你可以尝试其他代码,例如旅行推销员问题或二叉树。结果应该都差不多。

  • 正如我在文中提到的那样,这个基准测试运行的PHP-8版本不是最终版本,因此可能最终的发行版会增添其他改进。

  • 我在测试结果中保留了很多位小数,虽然看着很罗嗦,但我只是想尽可能做到精确。

  • 在基准测试中,我使用keinos和martinpham的docker镜像。其实还有很多其他工具,你可以选择自己喜欢的尝试一下。

  • 我运行测试的笔记本电脑的配置为:Linux Manjaro、3 GHz Intel Core i5、32 GB RAM。在其他配置下,具体的数字可能会有所不同,但是我相信改进结果都很相似。

来源:https://levelup.gitconnected.com/how-fast-is-php-8-going-to-be-f7fdc111cd6

PHP7还没学明白,PHP8就要来了, 能有多快?[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111841.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Java——流

    Java——流

    2021年5月25日
  • react 创建新页面_如何新建react项目「建议收藏」

    在开发React项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,今天我们介绍的是浏览器中直接引入的方式搭建react项目。如何新建react项目前文中,我们介绍过了2种react项目的搭建方式,分别是webpack的方式搭建和create-react-app脚手架的方式搭建感兴趣的同学可以点击下方链接,进行学习。webpack的方式搭建项目:怎样搭建rea…

    2022年4月14日
  • monkey稳定性测试「建议收藏」

    monkey稳定性测试「建议收藏」稳定性测试定义:是指软件长时间的持续运行,系统版本是否稳定,是否持续的为客户提供服务。指标:异常的次数,异常的频率稳定性如何实施?使用monkey向系统发送随机的用户事件流,实现对正在开发的应用程序进行稳定性测试,更好的模拟用户操作adbshellmonkey可以查看所有的命令usage:monkey[-pALLOWED_PACKAGE[-pALLOWED_PACKAGE]…][-cMAIN_CATEGORY[-cMAIN_CATEGORY]…][–ignore-cra

    2022年9月3日
  • pl sql 循环_sql循环语句怎么写

    pl sql 循环_sql循环语句怎么写1、Loop……endLoop语句标准格式:LOOP statement_list–循环代码块 IFexit_conditionTHEN EXIT;–满足IF条件退出循环 ENDIF;ENDLOOP;–从1开始打印,当i=10退出循环。pl/sql中“=”表示比较,“:=”表示赋值。DECLAREiNUMBER;BEGIN i:=0; LOOP i:=i+1; dbms_output.put_line(i); IF i=

    2022年10月9日
  • mac dg破解激活码-激活码分享2022.02.22

    (mac dg破解激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlHCIQ56F36O-eyJsaWNlbnNlSW…

    2022年4月1日
  • jdbc连接数据库的基本步骤「建议收藏」

    jdbc连接数据库的基本步骤「建议收藏」1.在项目中导入java.sql包2.加载数据库驱动程序Class.forName(“com.mysql.cj.jdbc.Driver”);3.定义数据库的链接地址Stringurl=“jdbc:mysql://localhost/studentserverTimezone=GMT%2B8&amp;amp;useSSL=false”;Stringdatabasename=“root”;S…

    2022年7月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号