首页 后端开发 php教程 PHP7正式版测试,性能惊艳!_php技巧

PHP7正式版测试,性能惊艳!_php技巧

May 16, 2016 pm 08:03 PM

我们今天就来看一下PHP 7正式版的算法和 wordpress 应用在其上的性能表现。

PHP7 的安装,真是非常地向下兼容,下载,解压,把之前的配置命令用上,一路回车下去,毫无违和感。为了不影响现有的环境的运行,所有专门开辟了目录 。

配置参数如下:

--prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
登录后复制

GCC 版本
据鸟哥建议,使用新一点的编译器, 推荐 GCC 4.8以上, 因为只有 GCC 4.8以上 PHP 才会开启 Global Register for opline and execute_data 支持, 这个会带来5%左右的性能提升。所以本实验选用的 GCC 版本为gcc version 4.8.2 20131212 (Red Hat 4.8.2-8) (GCC)。

安装好之后,做上软链接:

ln -s /usr/local/php7/bin/php /usr/bin/php7
ln -s /usr/local/php7/bin/php-config /usr/bin/php7-config 
ln -s /usr/local/php7/bin/phpize /usr/bin/php7ize
ln -s /usr/local/php7/sbin/php-fpm /usr/sbin/php7-fpm
登录后复制

php7 -v 看到了我们熟悉的提示:

[root@localhost test]# php7 -v
PHP 7.0.0 (cli) (built: Dec 2 2015 19:19:14) ( ZTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
登录后复制

首先做的是性能评测,评测机型,首都在线云主机,4核 CPU Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz,内存4G,操作系统 Centos 6.5。

随便写了三段程序:

第一段,生成一个 60 万元素的数组,通过查找key 的方式,来确定key是否存在。

<&#63;php
$a = array();
for($i=0;$i<600000;$i++){
  $a[$i] = $i;
}

foreach($a as $i)
{
 array_key_exists($i, $a);
}

登录后复制

首先是 PHP 5.3.17 版

[root@localhost test]# time php search_by_key.php 
real 0m0.389s
user 0m0.337s
sys  0m0.051s
[root@localhost test]# time php search_by_key.php 
real 0m0.378s
user 0m0.308s
sys  0m0.062s
[root@localhost test]# time php search_by_key.php 
real 0m0.378s
user 0m0.317s
sys  0m0.061s
登录后复制

其次是 PHP7 版

[root@localhost php7]# time php7 search_by_key.php
real 0m0.082s
user 0m0.066s
sys  0m0.014s
[root@localhost php7]# time php7 search_by_key.php
real 0m0.080s
user 0m0.058s
sys  0m0.021s
[root@localhost php7]# time php7 search_by_key.php
real 0m0.080s
user 0m0.053s
sys  0m0.026s`
登录后复制

这刚出手,就名不虚传,响应时间在PHP7下运行变为原来的1/4。真牛!
那我还得搞俩试试,第二段,还是上面的这个方式,不过由于速度较慢,所以变成了一个60000个元素的数组,查找值。
代码如下:
php代码:

<&#63;php
$a = array();
for($i=0;$i<600000;$i++){
  $a[$i] = $i;
}

foreach($a as $i)
{
 array_key_exists($i, $a);
}


[root@localhost test]# time php search_by_val.php 
real 0m24.296s
user 0m24.184s
sys  0m0.025s
[root@localhost test]# time php search_by_val.php 
real 0m25.523s
user 0m25.317s
sys  0m0.026s
[root@localhost test]# time php search_by_val.php 
real 0m26.026s
user 0m25.478s
sys  0m0.092s

登录后复制

等待的时间,总是觉得很漫长,三次测试,花掉了75秒多。下面,PHP 7 登场了。

[root@localhost php7]# time php7 search_by_val.php
real 0m3.362s
user 0m3.323s
sys  0m0.007s
[root@localhost php7]# time php7 search_by_val.php
real 0m3.266s
user 0m3.251s
sys  0m0.004s
[root@localhost php7]# time php7 search_by_val.php
real 0m3.290s
user 0m3.275s
sys  0m0.006s
登录后复制

有没有!速度整整提高了将近7倍。
笔者激动的心情难以言表,顺手又整了一个比较高效的素数算法。算出2000000以内的素数的数目,这次咱们 PHP7先开始。

[root@localhost php7]# time php7 prime_v3.php 2000000
real 0m1.151s
user 0m1.129s
sys  0m0.010s
[root@localhost php7]# time php7 prime_v3.php 2000000
real 0m1.141s
user 0m1.123s
sys  0m0.011s
[root@localhost php7]# time php7 prime_v3.php 2000000
real 0m1.145s
user 0m1.128s
sys  0m0.010s`
登录后复制

速度稳定在 1.2 S
而 PHP 5.3 呢,这次比上一次的差距小点了,但是PHP7速度也是它的3倍到4倍之间。

[root@localhost test]# time php prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m4.425s
user 0m4.380s
sys  0m0.023s
[root@localhost test]# time php prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m4.457s
user 0m4.414s
sys  0m0.032s
[root@localhost test]# time php prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m4.464s
user 0m4.399s
sys  0m0.046s
登录后复制

此素数算法如下,用的是筛选法。相对是运行速度比较快的求素数算法。

<&#63;php
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
$num = $argv[1];
$ret = array(2);
$flag = false;
for($i=3; $i<=$num; $i+=2)
{
 $flag = false;
 $sqrt = sqrt($i);
 foreach($ret as $prime)
 {
  if($i%$prime == 0)
  {
   $flag = true;
   break;
  }
  if($prime>$sqrt)
  {
   break;
  }
 }

 if(!$flag)
 {
  $ret[] = $i;
 }
}
echo (count($ret))."\n";

登录后复制

至此,我们基本可以说明问题。这些代码,并没有使用复杂的函数库,也没有大量的网络和IO,性能却得到了至少3倍以上的优化。这真是一个历史性的进步。而在我们过去的性能评测中,语言层面的性能,往往是忽略的,为什么这么讲呢,比如在 XHProf中,就专门有一个选项,XHPROF_FLAGS_NO_BUILTINS,用于对内置的函数或者内部函数不做分析,比如数组、日期等的函数。因为大家往往错过了这块的提升空间,当然,一般人也无法在这块提升,所以才有了 HHVM,也激发了今天的PHP 7。

一轮测试下来,激发起了笔者对PHP 7更多了解的兴趣,想看看扩展和一些常见的框架支持如何,顺手做了如下两个测试。

记得在Alpha1版本的时候,OneAPM是不能支持的,这次行不行呢?笔者拿到 OneApm_php_Agent_1.0.0.18.tar 版,顺利安装。

成功地识别了PHP 7的安装路径。

安装成功。

对于扩展,我是没有信心再测下去了,下面测两个常用的东东,一个是Wordpress,虽然网站被和谐了,但是是什么地球人都知道吧。另外一个是ThinkPHP, 这是国内使用量最广泛的PHP开发框架,绝对第一,不是之一。笔者也是TP的粉丝。

 是该夸这两个软件做得好呢?还是该夸 PHP 7的兼容做得好呢,我也不知道了,反正小编看到了初步正常。
Wordpress 后台,在PHP 7 做为 FastCGI 后端时,运行正常。


ThinkPHP 最新版本3.2.3 在PHP 7 下运行正常。


最后我们来做一个压力测试,两个wordpress,一个是基本为空的刚刚安装的版本,一个是发布了数篇文章的版本,我们针对主页进行测试。分别在PHP5.5和PHP7下进行测试,并且两者都分别打开和关闭Zend OpCache,看看响应性能是否有明显变化。
1、PHP 5.5.26 无Zend Opcache 有文章版,20个并发


2、PHP 5.5.26 无Zend Opcache 有文章版,10个并发


3、PHP 5.5.26 无Zend Opcache 无文章版,20个并发


4、PHP 5.5.26 无Zend Opcache 无文章版,10个并发


可见并发并没有对总时间造成影响,有文章相比无文章,总时长慢了6S,平均慢了20%。
下面我们打开PHP 5.5.26 的Zend OpCache。

1、PHP 5.5.26 有Zend Opcache 有文章版,20个并发

2、PHP 5.5.26 有Zend Opcache 有文章版,10个并发

3、PHP 5.5.26 有Zend Opcache 无文章版,20个并发


4、PHP 5.5.26 有Zend Opcache 无文章版,10个并发


可见,是否开启Zend OpCache,对性能影响极为明显。对有文章版有2倍以上提升,对无文章版有4倍以上提升。

下面我们来测试PHP7,同样第一次是无Zend OpCache的版本。
1、PHP 7 无Zend Opcache 有文章版,20个并发


2、PHP 7 无Zend Opcache 有文章版,10个并发


从以上数据可见,在PHP7 对比PHP5.5.26有30%左右的性能提升,再来看一下无文章版。

3、PHP7 无Zend Opcache 无文章版,20个并发


4、PHP 7 无Zend Opcache 无文章版,10个并发

无文章版对比PHP5.5.26有 60%左右的提升。下面再来看一下开启PHP7下Zend OpCache的版本。
注意PHP7的Zend OpCache 与PHP5不同,不需要专门安装扩展,只需要在php.ini中加入如下三行配置即可。
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

1、PHP 7 有Zend Opcache 有文章版,20个并发


2、PHP 7 有Zend Opcache 有文章版,10个并发


3、PHP 7 有Zend Opcache 无文章版,20个并发


4、PHP 7 有Zend Opcache 无文章版,10个并发


太无敌了,开启Zend OpCache,有5倍以上性能提升,而对比同样开启Zend OpCache的5.5.26,也至少有3倍以上的性能提升。可以说Zend OpCache对高并发下的性能至为关键。

PHP7性能的评测就到这里,从6月份推出PHP7 alpha版以来,我们很欣喜地等来了PHP7正式版的发布。再次评测证明,PHP7,值得你的拥有,OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。而开启了Zend OpCache 的PHP7和OneAPM,更是值得你来热烈拥有。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章讨论了框架中的基本安全功能,以防止漏洞,包括输入验证,身份验证和常规更新。

See all articles