当前位置:首页 > PHP文摘 > 列表

php7和php5的详细对比

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-21 19:46:03 浏览: 评论:0 

PHP7

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

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

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

安装两个PHP版本

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

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

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

PHP7:

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

PHP 7.1.5 (cli) (built: May 13 2017 23:36:41) ( NTS )

Copyright (c) 1997-2017 The PHP Group

PHP5:

# /usr/bin/php -v

PHP 5.6.30 (cli) (built: Jan 19 2017 22:31:39)

Copyright (c) 1997-2016 The PHP Group

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

操作系统:CentOS 7.2 64位

基础配置:1核 1GB 1Mbps

主机品牌:腾讯云

PHP7和PHP5的对决

1. 纯php脚本测试

vim test.php

  1. $arr = array(); 
  2. for ($i = 0; $i < 500000; $i++) { 
  3.         $arr[$i] = $i
  4.    
  5. $tmp = array(); 
  6. foreach ($arr as $i) { 
  7.     if ($i % 2 == 0) { 
  8.         $is_exists = array_key_exists($i$arr); 
  9.         if ($is_exists) { 
  10.            array_push($tmp$i); 
  11.         } 
  12.     } 

PHP5版本测试:

  1. time /usr/bin/php test.php  
  2.  
  3. real    0m0.301s 
  4.  
  5. user    0m0.239s 
  6.  
  7. sys     0m0.050s 
  8.  
  9. -------------------------- 
  10.  
  11. time /usr/bin/php test.php 
  12.  
  13. real    0m0.310s 
  14.  
  15. user    0m0.241s 
  16.  
  17. sys     0m0.054s 
  18.  
  19. -------------------------- 
  20.  
  21. time /usr/bin/php test.php 
  22.  
  23. real    0m0.289s 
  24.  
  25. user    0m0.238s 

PHP7版本测试:

  1. time /usr/local/php7/bin/php test.php 
  2.  
  3. real    0m0.087s 
  4.  
  5. user    0m0.063s 
  6.  
  7. sys     0m0.024s 
  8.  
  9. ------------------------------------- 
  10.  
  11. time /usr/local/php7/bin/php test.php 
  12.  
  13. real    0m0.106s 
  14.  
  15. user    0m0.073s 
  16.  
  17. sys     0m0.033s 
  18.  
  19. -------------------------------------- 
  20.  
  21. time /usr/local/php7/bin/php test.php 
  22.  
  23. real    0m0.083s 
  24.  
  25. user    0m0.061s 

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

2.php数据库操作测试

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

  1. Table: test_user 
  2. Create TableCREATE TABLE `test_user` ( 
  3.   `uid` int(11) NOT NULL AUTO_INCREMENT, 
  4.   `namechar(100) NOT NULL DEFAULT ''
  5.   PRIMARY KEY (`uid`) 
  6. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8<br data-filtered="filtered"

给test_user表插入一条数据:

  1. insert into test_user (uid,namevalues (1,"dada"); 
  2. MariaDB [test]> select * from test_user; 
  3. +-----+------+ 
  4. | uid | name | 
  5. +-----+------+ 
  6. |   1 | dada | 
  7. +-----+------+<br data-filtered="filtered"> 

创建数据库测试脚本test_db.php,确保你的两个PHP版本都安装了PDO扩展。

  1. /usr/bin/php -m|grep pdo 
  2. pdo_mysql 
  3. pdo_sqlite 
  4.    
  5. /usr/local/php7/bin/php -m|grep pdo 
  6. pdo_mysql 
  7. pdo_sqlite<br data-filtered="filtered"

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

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

  1. $host = "yourHost"
  2. $user = "yourUser"
  3. $pass = "yourPass"
  4. $db   = "test"
  5. $port = 3306; 
  6.    
  7. try 
  8.   $dbh = new PDO("mysql:host=$host;dbname=$db"$user$pass); 
  9.   echo "Connected<p>"
  10. catch (Exception $e
  11.   echo "Unable to connect: " . $e->getMessage() ."<p>"
  12.    
  13. $sql = "select  SQL_NO_CACHE * from test_user;"
  14. $tmp = array(); 
  15. for ($i=1; $i<=500000; $i++) { 
  16.   $ret = $dbh->query($sql);   
  17.   foreach ($ret as $row) { 
  18.     $tmp['id']   = $row['id']; 
  19.     $tmp['name'] = $row['name']; 
  20.   } 
  21. }<br type="_moz" data-filtered="filtered"

PHP5测试test_db.php:

  1. time /usr/bin/php test_db.php 
  2.  
  3. real    0m48.396s 
  4.  
  5. user    0m11.149s   
  6.  
  7. sys     0m3.998s 
  8.  
  9. real    0m51.447s 
  10.  
  11. user    0m11.800s 
  12.  
  13. sys     0m4.395s 
  14.  
  15. real    0m51.517s 
  16.  
  17. user    0m11.733s 

PHP7测试test_db.php:

  1. real    0m47.900s 
  2.  
  3. user    0m9.875s 
  4.  
  5. sys     0m4.130s 
  6.  
  7. real    0m46.977s 
  8.  
  9. user    0m9.760s 
  10.  
  11. sys     0m3.983s 
  12.  
  13. real    0m50.010s 
  14.  
  15. user    0m10.268s 

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

3.PHP框架测试

thinkphp

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

(一)框架入口测试

PHP5下的测试:

  1. time /usr/bin/php ./public/index.php 
  2.  
  3. real    0m0.036s 
  4.  
  5. user    0m0.026s 
  6.  
  7. sys     0m0.010s 
  8.  
  9. real    0m0.038s 
  10.  
  11. user    0m0.026s 
  12.  
  13. sys     0m0.012s 
  14.  
  15. real    0m0.041s 
  16.  
  17. user    0m0.032s 

PHP7下的测试:

  1. time /usr/local/php7/bin/php ./public/index.php 
  2.  
  3. real    0m0.027s 
  4.  
  5. user    0m0.021s 
  6.  
  7. sys     0m0.005s 
  8.  
  9. real    0m0.027s 
  10.  
  11. user    0m0.018s 
  12.  
  13. sys     0m0.009s 
  14.  
  15. real    0m0.025s 
  16.  
  17. user    0m0.023s 

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

(二)框架逻辑测试

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

  1. <?php 
  2. namespace app\index\controller; 
  3.    
  4. class Index 
  5.     public function index() 
  6.     { 
  7.        $arr = array(); 
  8.        for ($i = 0; $i < 500000; $i++) { 
  9.            $arr[$i] = $i
  10.        } 
  11.    
  12.        $tmp = array(); 
  13.        foreach ($arr as $i) { 
  14.            if ($i % 2 == 0) { 
  15.                $is_exists = array_key_exists($i$arr); 
  16.                if ($is_exists) { 
  17.                    array_push($tmp$i); 
  18.                } 
  19.           } 
  20.       } 
  21.     } 
  22. }<br data-filtered="filtered"

PHP5版本:

  1. time /usr/bin/php ./public/index.php 
  2.  
  3. real    0m0.538s 
  4.  
  5. user    0m0.463s 
  6.  
  7. sys     0m0.072s 
  8.  
  9. real    0m0.454s 
  10.  
  11. user    0m0.386s 
  12.  
  13. sys     0m0.065s 
  14.  
  15. real    0m0.387s 
  16.  
  17. user    0m0.331s 

PHP7版本:

  1. time /usr/local/php7/bin/php ./public/index.php 
  2.  
  3. real    0m0.150s 
  4.  
  5. user    0m0.123s 
  6.  
  7. sys     0m0.024s 
  8.  
  9. real    0m0.137s 
  10.  
  11. user    0m0.105s 
  12.  
  13. sys     0m0.031s 
  14.  
  15. real    0m0.123s 
  16.  
  17. user    0m0.096s 

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

laravel

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

(一) 框架入口测试

PHP5版本:

  1. time /usr/bin/php ./public/index.php 
  2.  
  3. real    0m0.104s 
  4.  
  5. user    0m0.081s 
  6.  
  7. sys     0m0.022s 
  8.  
  9. real    0m0.148s 
  10.  
  11. user    0m0.122s 
  12.  
  13. sys     0m0.025s 
  14.  
  15. real    0m0.122s 
  16.  
  17. user    0m0.100s 

PHP版本

  1. time /usr/local/php7/bin/php ./public/index.php 
  2.  
  3. real    0m0.079s 
  4.  
  5. user    0m0.064s 
  6.  
  7. sys     0m0.015s 
  8.  
  9. real    0m0.081s 
  10.  
  11. user    0m0.067s 
  12.  
  13. sys     0m0.014s 
  14.  
  15. real    0m0.067s 
  16.  
  17. user    0m0.054s 

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

(二)框架逻辑测试

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

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

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

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

  1. public function index() 
  2.       $arr = array(); 
  3.        for ($i = 0; $i < 500000; $i++) { 
  4.            $arr[$i] = $i
  5.        } 
  6.    
  7.        $tmp = array(); 
  8.        foreach ($arr as $i) { 
  9.            if ($i % 2 == 0) { 
  10.                $is_exists = array_key_exists($i$arr); 
  11.                if ($is_exists) { 
  12.                    array_push($tmp$i); 
  13.                } 
  14.           } 
  15.       } 

PHP5版本

  1. time /usr/bin/php ./public/index.php 
  2.  
  3. real    0m0.510s 
  4.  
  5. user    0m0.377s 
  6.  
  7. sys     0m0.079s 
  8.  
  9. real    0m0.627s 
  10.  
  11. user    0m0.447s 
  12.  
  13. sys     0m0.091s 
  14.  
  15. real    0m0.519s 
  16.  
  17. user    0m0.436s 

PHP7版本

  1. time /usr/local/php7/bin/php ./public/index.php 
  2.  
  3. real    0m0.201s 
  4.  
  5. user    0m0.167s 
  6.  
  7. sys     0m0.032s 
  8.  
  9. real    0m0.216s 
  10.  
  11. user    0m0.174s 
  12.  
  13. sys     0m0.040s 
  14.  
  15. real    0m0.169s 
  16.  
  17. user    0m0.134s 

PHP7性能提升了3到4倍

结论

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

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

Tags: php7 php5

分享到: