php7.1与5.6的区别,PHP7 有没有你们说的那么牛逼 (php7.1 和 php5.6 横向对比) 转载

PHP7 有没有你们说的那么牛逼 (php7.1 和 php5.6 横向对比) 转载

PHP7 正式发布到现在已经一年半了, 刚出道就号称比旧版本快了几倍, 各种开源框架或系统运行在 PHP7 上速度效率提高了几倍, 反正不管是媒体还是开发者都在煽风点火, 不, 应该是赞不绝口.

我就静静看你们装逼, 不说话.

一般手机系统升级我是跑最后的, 因为不愿意踩坑, 毕竟 iOS 和 Android 这种系统都会出现 bug, 何况世界上被人黑的最多的语言.

今日时机已到, 看看 PHP7 有没有传说的那么王炸.

安装两个 PHP 版本

http://php.net/ 已经有最新 PHP7 的最新版本, 大家可自行下载.

为了测试 PHP5 和 PHP7(PHP6 已被放弃, 心疼 1s) 的性能, 我在不同的目录安装了两个 php 版本.

安装过程就略过了, 无论源码安装还是包管理工具安装, 记得自己的路径即可.PHP7:

# /usr/local/php7/bin/php -v

PHP7.1.5(cli)(built:May13201723:36:41)(NTS)

Copyright(c)1997-2017ThePHPGroup

Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend TechnologiesPHP5:

# /usr/bin/php -v

PHP5.6.30(cli)(built:Jan19201722:31:39)

Copyright(c)1997-2016ThePHPGroup

Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

环境说明: 为了保证最佳的测试效果, 本次测试在直接在生产环境进行, 更逼近真实情况.

操作系统: CentOS 7.2 64 位

基础配置: 1 核 1GB 1Mbps

主机品牌: 腾讯云

PHP7 和 PHP5 的对决

1. 纯 php 脚本测试vim test.php

$arr=array();

for($i=0;$i<500000;$i++){

$arr[$i]=$i;

}

$tmp=array();

foreach($arras$i){

if($i%2==0){

$is_exists=array_key_exists($i,$arr);

if($is_exists){

array_push($tmp,$i);

}

}

}

PHP5 版本测试:time/usr/bin/php test.php

real0m0.301s

user0m0.239s

sys 0m0.050s--------------------------

time/usr/bin/php test.php

real0m0.310s

user0m0.241s

sys 0m0.054s--------------------------

time/usr/bin/php test.php

real0m0.289s

user0m0.238s

sys 0m0.050s

PHP7 版本测试:time/usr/local/php7/bin/php test.php

real0m0.087s

user0m0.063s

sys 0m0.024s-------------------------------------

time/usr/local/php7/bin/php test.php

real0m0.106s

user0m0.073s

sys 0m0.033s--------------------------------------

time/usr/local/php7/bin/php test.php

real0m0.083s

user0m0.061s

sys 0m0.022s

通过数据可以看出来, 单纯的 php 脚本测试, 可以看出 php7 性能提升了 3 到 4 倍.

2.php 数据库操作测试

首先我们创建一个用户表:Table:test_user

CreateTable:CREATE TABLE`test_user`(

`uid`int(11)NOT NULL AUTO_INCREMENT,

`name`char(100)NOT NULL DEFAULT'',

PRIMARY KEY(`uid`)

)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULT CHARSET=utf8

给 test_user 表插入一条数据:insertintotest_user(uid,name)values(1,"dada");

MariaDB[test]>select*fromtest_user;

+-----+------+

|uid|name|

+-----+------+

|1|dada|

+-----+------+

创建数据库测试脚本 test_db.php, 确保你的两个 PHP 版本都安装了 PDO 扩展./usr/bin/php-m|grep pdo

pdo_mysql

pdo_sqlite

/usr/local/php7/bin/php-m|grep pdo

pdo_mysql

pdo_sqlite

我的两个 PHP 版本已经安装了 PDO(不要再使用 php_mysql 扩展, 已经过时了, PHP7 已经完全抛弃, mysqli 也不建议使用).

接下来我们通过 PDO 编写脚本, 测试 select 执行 50 万次的性能对比:$host="yourHost";

$user="yourUser";

$pass="yourPass";

$db="test";

$port=3306;

try

{

$dbh=newPDO("mysql:host=$host;dbname=$db",$user,$pass);

echo"Connected

";

}

catch(Exception$e)

{

echo"Unable to connect:".$e->getMessage()."

";

}

$sql="select SQL_NO_CACHE * from test_user;";

$tmp=array();

for($i=1;$i<=500000;$i++){

$ret=$dbh->query($sql);

foreach($retas$row){

$tmp['id']=$row['id'];

$tmp['name']=$row['name'];

}

}

PHP5 测试 test_db.php:time/usr/bin/php test_db.php

real0m48.396s

user0m11.149s

sys 0m3.998sreal0m51.447s

user0m11.800s

sys 0m4.395sreal0m51.517s

user0m11.733s

sys 0m4.439s

PHP7 测试 test_db.php:real0m47.900s

user0m9.875s

sys 0m4.130sreal0m46.977s

user0m9.760s

sys 0m3.983sreal0m50.010s

user0m10.268s

sys 0m4.307s

这次脚本执行了 50w 次查询, user 执行时间 PHP7 执行的脚本几乎都比 PHP5 要少一秒! 是少一秒不是一毫秒.

3.PHP 框架测试

thinkphp

国内肯定是首选 thinkphp 框架, 选择最新的 thinkphp5. 我这里直接在官网下载的 thinkphp5.0.9 版本.

(一) 框架入口测试

PHP5 下的测试:time/usr/bin/php./public/index.php

real0m0.036s

user0m0.026s

sys 0m0.010sreal0m0.038s

user0m0.026s

sys 0m0.012sreal0m0.041s

user0m0.032s

sys 0m0.009s

PHP7 下的测试:time/usr/local/php7/bin/php./public/index.php

real0m0.027s

user0m0.021s

sys 0m0.005sreal0m0.027s

user0m0.018s

sys 0m0.009sreal0m0.025s

user0m0.023s

sys 0m0.002s

在入口测试下, 可以看到 PHP 和 PHP7 没有太大的区别, 但 PHP7 还是稍微快一点.

(二) 框架逻辑测试

在框架入口复用第一步的逻辑:<?php

namespaceapp\index\controller;

classIndex

{

publicfunctionindex()

{

$arr=array();

for($i=0;$i<500000;$i++){

$arr[$i]=$i;

}

$tmp=array();

foreach($arras$i){

if($i%2==0){

$is_exists=array_key_exists($i,$arr);

if($is_exists){

array_push($tmp,$i);

}

}

}

}

}

PHP5 版本:time/usr/bin/php./public/index.php

real0m0.538s

user0m0.463s

sys 0m0.072sreal0m0.454s

user0m0.386s

sys 0m0.065sreal0m0.387s

user0m0.331s

sys 0m0.055s

PHP7 版本:time/usr/local/php7/bin/php./public/index.php

real0m0.150s

user0m0.123s

sys 0m0.024sreal0m0.137s

user0m0.105s

sys 0m0.031sreal0m0.123s

user0m0.096s

sys 0m0.026s

在 thinkphp 框架中使用 PHP7 版本, 性能提升大约是 PHP5 版本的 4 倍!

laravel

然后我们测试下现在最火热的 PHP 艺术家的框架.

(一) 框架入口测试

PHP5 版本:time/usr/bin/php./public/index.php

real0m0.104s

user0m0.081s

sys 0m0.022sreal0m0.148s

user0m0.122s

sys 0m0.025sreal0m0.122s

user0m0.100s

sys 0m0.021s

PHP 版本time/usr/local/php7/bin/php./public/index.php

real0m0.079s

user0m0.064s

sys 0m0.015sreal0m0.081s

user0m0.067s

sys 0m0.014sreal0m0.067s

user0m0.054s

sys 0m0.013s

我们可以看到 laravel 的框架入口测试中, PHP5 和 PHP7 的表现差异不大, 但即使 PHP5 最高快的 0.081s 也比 PHP7 版本最慢的 0.067s 要慢. 所以 PHP7 还是更胜一筹.

(二) 框架逻辑测试

尝试增加一点逻辑, 和 thinkphp 一样, 复用测试逻辑.

首先修改 laravel 路由, 直接调用 UserController 的 index 方法:

Route::get('/', 'UserController@index');

在 index 方法中写入测试逻辑:publicfunctionindex()

{

$arr=array();

for($i=0;$i<500000;$i++){

$arr[$i]=$i;

}

$tmp=array();

foreach($arras$i){

if($i%2==0){

$is_exists=array_key_exists($i,$arr);

if($is_exists){

array_push($tmp,$i);

}

}

}

}

PHP5 版本time/usr/bin/php./public/index.php

real0m0.510s

user0m0.377s

sys 0m0.079sreal0m0.627s

user0m0.447s

sys 0m0.091sreal0m0.519s

user0m0.436s

sys 0m0.079s

PHP7 版本time/usr/local/php7/bin/php./public/index.php

real0m0.201s

user0m0.167s

sys 0m0.032sreal0m0.216s

user0m0.174s

sys 0m0.040sreal0m0.169s

user0m0.134s

sys 0m0.034s

PHP7 性能提升了 3 到 4 倍

压力测试

1000 个请求, 50 个并发

PHP5 版本:

ab7653affab982b574eb7acc55df2e04.gif

image.png

三次样本如下:

ab7653affab982b574eb7acc55df2e04.gif

image.png

ab7653affab982b574eb7acc55df2e04.gif

image.png

ab7653affab982b574eb7acc55df2e04.gif

image.png

PHP7 版本:

ab7653affab982b574eb7acc55df2e04.gif

1

ab7653affab982b574eb7acc55df2e04.gif

2

ab7653affab982b574eb7acc55df2e04.gif

3

ab7653affab982b574eb7acc55df2e04.gif

4

通过压力测试, 在 PHP7 版本下, 可以看到单个请求时间和请求完成时间以及每个连接请求实际运行时间的平均值都耗时更少, 最重要的性能指标 QPS 也是高于 PHP5 的版本.

PHP7 的 opcache 性能测试

开启 opcache:

ab7653affab982b574eb7acc55df2e04.gif

image.png

ab7653affab982b574eb7acc55df2e04.gif

image.png

ab7653affab982b574eb7acc55df2e04.gif

image.png

ab7653affab982b574eb7acc55df2e04.gif

image.png

卧槽! 开启了 opcache 的 PHP7 果然是要起飞的节奏, 相比未开启的 PHP7 性能提升了十几倍, 相比 PHP5 提升了将进 20 倍! 问你怕不怕!

PHP 脚本测试数据如下:

ab7653affab982b574eb7acc55df2e04.gif

PHP7 vs PHP5.png

纯 php 脚本测试过程, PHP7 性能大约是 PHP5 的 3 到 4 倍.

压力测试数据如下:

ab7653affab982b574eb7acc55df2e04.gif

PHP5 vs PHP7 vs PHP7+OPCACHE.png

结论:

本文对 PHP7 和 PHP5 进行简单对比, 性能确实有 3 到 4 倍提升, 无论是在 php 纯脚本中, 还是在框架中, PHP7 高性能的表现都是一致的.

PHP7 很快, PHP7+OpCache 飞快, PHP7 确实牛逼, PHP 的新时代已来临, 赶紧用起来!

来源: https://www.cnblogs.com/think-a-lot/p/8572661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值