您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > php

PHP 8 能有多快?

时间:2020-02-23 20:48:33  来源:  作者:

php-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。让我们通过本文来看看这项功能对PHP脚本的速度有怎样的影响?

PHP 8 能有多快?

作者 | Pedro Escudero

译者 | 弯月,责编 | 郭芮

以下为译文:

今年年底,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年的时候我们是怎么过来的?

PHP 8 能有多快?

注意:

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

  • 正如我在文中提到的那样,这个基准测试运行的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

作者:Pedro Escudero,工程副总裁@zinio.com。

本文为 CSDN 翻译,转载请注明来源出处。



Tags:PHP 8   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
PHP 8,PHP 的一个新的大版本,预计将于2020年12月3日发布,这意味着将不会有 PHP 7.5 版本。PHP8目前正处于非常活跃的开发阶段,所以在接下来的几个月里,情况可能会发生很大的变化...【详细内容】
2020-07-06  Tags: PHP 8  点击:(67)  评论:(0)  加入收藏
PHP-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。让我们通过本文来看看这项功能对PHP脚本的速度有怎样的影响? 以下为译文:今年年底,PHP-8即将发布。虽然这个主版本...【详细内容】
2020-05-07  Tags: PHP 8  点击:(47)  评论:(0)  加入收藏
PHP-8将于今年年底发布,其最令人期待的功能之一就是JIT编译。让我们通过本文来看看这项功能对PHP脚本的速度有怎样的影响?作者 | Pedro Escudero译者 | 弯月,责编 | 郭芮以下为...【详细内容】
2020-02-23  Tags: PHP 8  点击:(71)  评论:(0)  加入收藏
▌简易百科推荐
序言:前段时间织梦因为版权的问题在网上闹得沸沸扬扬,也提醒了众多开发者选择cms上应该谨慎使用,今天给大家展示一款自己搭建的内容管理系统,不用担心版权的问题,而且非常容易维...【详细内容】
2021-11-30  小程序软件开发    Tags:管理系统   点击:(34)  评论:(0)  加入收藏
准备安装包(PHP: Hypertext Preprocessor)下载安装包以及组件wget https://www.php.net/distributions/php-8.0.0.tar.bz2wget https://github.com/phpredis/phpredis/archive...【详细内容】
2021-11-09  mimic96    Tags:PHP   点击:(40)  评论:(0)  加入收藏
golang context 很好用,就使用php实现了github地址 : https://github.com/qq1060656096/php-go-context context使用闭坑指南1. 将一个Context参数作为第一个参数传递给传入和...【详细内容】
2021-11-05  1060656096    Tags:PHP   点击:(41)  评论:(0)  加入收藏
一段数组为例:$list = array:4 [ 0 => array:7 [ "id" => 56 "mer_id" => 7 "order_id" => "wx163265961408769974" "is_postage" => 0 "store_name" => "奇...【详细内容】
2021-09-29  七七小影视    Tags:PHP   点击:(65)  评论:(0)  加入收藏
利用JS的CryptoJS 3.x和PHP的openssl_encrypt,openssl_decrypt实现AES对称加密解密,由于需要两种语言对同一字符串的操作,而CryptoJS 的默认加密方式为“aes-256-cbc”,PHP端也...【详细内容】
2021-09-16  李老师tome    Tags:对称加密   点击:(79)  评论:(0)  加入收藏
1、checkdate()验证格利高里日期即:日期是否存在。checkdate(month,day,year);month必需。一个从 1 到 12 的数字,规定月。day必需。一个从 1 到 31 的数字,规定日。year必需。...【详细内容】
2021-08-31  七七小影视    Tags:时间函数   点击:(80)  评论:(0)  加入收藏
对于各类开发语言来说,整数都有一个最大的位数,如果超过位数就无法显示或者操作了。其实,这也是一种精度越界之后产生的精度丢失问题。在我们的 PHP 代码中,最大的整数非常大,我...【详细内容】
2021-08-26  硬核项目经理    Tags:PHP   点击:(83)  评论:(0)  加入收藏
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门。今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总。上文说过,物理结构是用于确定数据以何种方式存...【详细内容】
2021-07-19  硬核项目经理    Tags:线性表   点击:(94)  评论:(0)  加入收藏
一、开启IIS全部功能。二、部署PHP1.官网下载并解压PHP: https://windows.php.net/downloads/releases/2.将php.ini-development文件改为php.ini3.修改php.ini(1)去掉注释,并修...【详细内容】
2021-07-15  炘蓝火诗  今日头条  Tags:PHP环境   点击:(129)  评论:(0)  加入收藏
一、环境说明本文中使用本地VM虚机部署测试。OS:CentOS Linux release 7.8.2003 (Core)虚机配置:2核CPU、4G内存①系统为CentOS 7.8 x64最小化安装,部署前已完成系统初始化、...【详细内容】
2021-06-25  IT运维笔记  今日头条  Tags:PHP8.0.7   点击:(141)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条