2015年的夏天,虽然来得不算火热,但是在互联网技术的夏天,比任何一年都更为火热。

刚刚才结束了  月底的网易、支付宝、携程以及多家云存储厂商的接连故障的坏消息,6月上旬则迎来了编程语言界两大好消息,第一件是 Swift 2.0 发布以及开源,另一件是 PHP  alpha 版正式发布。这两件大事,都是可以载入相应的编程语言的史册级的事件。

Swift 2.0 的事,咱先不说了,本文的重点是带着大家见识一下鸟哥等众位大神打磨了2年的PHP ,看看是否真的如之前所说的霸气。以及测试了一下现有软件和扩展的兼容性。

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
安装好之后,做上软链接:
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.0alpha1 (cli) (built: Jun 13 2015 11:33:39)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, 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是否存在。

<?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 test]# time php7 search_by_key.php
real 0m0.139s
user 0m0.055s
sys 0m0.048s
[root@localhost test]# time php7 search_by_key.php
real 0m0.089s
user 0m0.058s
sys 0m0.030s
[root@localhost test]# time php7 search_by_key.php
real 0m0.097s
user 0m0.065s
sys 0m0.022s

这刚出手,就名不虚传,响应时间在PHP7下运行变为原来的1/4。真牛!

那我还得搞俩试试,第二段,还是上面的这个方式,不过由于速度较慢,所以变成了一个60000个元素的数组,查找值。

 <?php
$a = array();
for($i=0;$i<60000;$i++){
$a[$i] = $i;
}
foreach($a as $i)
{
array_search($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 test]# time php7 search_by_val.php
real 0m3.439s
user 0m3.410ssys 0m0.008s
[root@localhost test]# time php7 search_by_val.php
real 0m3.426suser 0m3.409s
sys 0m0.007s
[root@localhost test]# time php7 search_by_val.php
real 0m3.616suser 0m3.400s
sys 0m0.018s

吊咋天,有没有!速度整整提高了将近7倍。

笔者激动的心情难以言表,顺手又整了一个比较高效的素数算法。算出2000000以内的素数的数目,

这次咱们 PHP7先开始。

[root@localhost test]# time php7 prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m1.211s
user 0m1.191s
sys 0m0.015s
[root@localhost test]# time php7 prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m1.221s
user 0m1.207s
sys 0m0.010s
[root@localhost test]# time php7 prime_v3.php 2000000
prime number count under 2000000 is :148933
real 0m1.220s
user 0m1.201s
sys 0m0.015s
速度稳定在 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
至此,我们基本可以说明问题。这些代码,并没有使用复杂的函数库,也没有大量的网络和IO,性能却得到了至少3倍以上的优化。这真是一个历史性的进步。而在我们过去的性能评测中,语言层面的性能,往往是忽略的,为什么这么讲呢,比如在 XHProf 中,就专门有一个选项,XHPROF_FLAGS_NO_BUILTINS,用于对内置的函数或者内部函数不做分析,比如数组、日期等的函数。因为大家往往错过了这块的提升空间,当然,一般人也无法在这块提升,所以才有了 HHVM,也激发了今天的PHP 7。
 

吊炸天的 PHP 7 ,你值得拥有的更多相关文章

  1. .NET平台系列15 .NET5的吊炸天性能改进

    系列目录     [已更新最新开发文章,点击查看详细] .NET5的性能改进测试功能 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配. .NET5的性能 ...

  2. 炫酷吊炸天的nodeppt

    由于要做一个关于node的分享,要准备写一个ppt方便就行交流.之前用的比较多的是slides(http://www.slides.com),最近知道了一个node写的工具,可以生成ppt,号称很强大 ...

  3. 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !

    package main import ( "fmt" ) type TeamBase struct { m_TeamId uint64 m_Rid uint32 m_RoomRu ...

  4. Sublime Text 3设置吊炸天PHP开发环境

    @heiyeluren @created: 2016/5/31 @last modify: 2016/7/8 1. 下载安装Sublime Text 3 http://www.sublimetext. ...

  5. 很吊炸天的Xcode插件,你想要的这都有

    整理自BigPolarBear的博客 .杂技杂记  以及CC此前整理. 古人云"工欲善其事必先利其器",打造一个强大的开发环境.是马上提升自身战斗力的绝佳途径!下面是搜集的一些有力 ...

  6. .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现

    系列目录     [已更新最新开发文章,点击查看详细] TechEmpower Web Framework Benchmarks 是许多Web应用程序框架执行基本任务(如JSON序列化.数据库访问和服 ...

  7. 一款吊炸天的AI图片增强工具!

    背景 如果你工作中需要制作文档,PPT,或者给文章配图,或者需要制作视频.一定会有在网上寻找图片素材的经历. 但网上的图质量参差不一,有时候找到了喜欢的图,但是质量不行,分辨率太低. 有的人就忍了,但 ...

  8. 吊炸天,Spring Security还有这种用法!

    在用Spring Security项目开发中,有时候需要放通某一个接口时,我们需要在配置中把接口地址配置上,这样做有时候显得麻烦,而且不够优雅.我们能不能通过一个注解的方式,在需要放通的接口上加上该注 ...

  9. 分享一些好用的 Chrome 扩展

    阅读本文大概需要 2.8 分钟. 前言 使用浏览器扩展程序可以使你的工作效率提高数倍不止,那么下面我就向大家分享一下我日常使用的扩展,可能大多数扩展大家都已经在使用了,不过也难免有一两个是你不知道的. ...

随机推荐

  1. [terry笔记]ora-00904 invalid identifier—同义词

    今天遇到一个问题,说起来也简单,但是困扰我半天. 升级数据库后,一个功能无法运行,在后台观察到其sql,发现sql中包含一个包执行不了,报错ora-00904 invalid identifier w ...

  2. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)

    记录规则 – 销售只能看到自己的客户,经理可以看到全部 原文地址:http://cn.openerp.cn/record_rule/ OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定 ...

  3. JavaWeb之 JSP基础

    什么是JSP JSP的全称是java server page, java服务页面.是提供java服务的页面~ 那么和Servlet有什么区别呢?JSP的页面既可以写java代码~也可以写html代码哦 ...

  4. oracle11g 重新配置em

    OS: ORACLE-LINUX 5.7 DB: 11.2.0.3 [oracle@b28-122 ~]$ emctl status dbconsoleOracle Enterprise Manage ...

  5. c# Random Class usage

    Random Usage sometimes, we hope to generate some random infor to manipulate our data structor. we ca ...

  6. .Net开源数据库设计工具Mr.E For Linq (EF 6.1) 教程(三)更新已发布的数据库

    项目发布到服务器后,如果在后期,数据库的结构发生变更,如何更新到服务器呢? 首先,右键点击数据库,导出结构脚本文件 把脚本文件和 Mr.E.rar拷贝到服务器,在服务器解压Mr.E,运行其中的“更新数 ...

  7. spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

    1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK

  8. JQuery 对 Select option 的操作---转载

    <select id="selectID" > <option value="1">1</option> <optio ...

  9. 典型:Eayui项目aspx页面引用js

    <link href="../Scripts/easyui1.3.5/themes/default/easyui.css" rel="stylesheet" ...

  10. 第五周作业 关于C语言的问卷调查

    你对自己的未来有什么规划?做了哪些准备? 目前还不是很了解,我希望自己再毕业后可以在一家IT公司上班.  目前效果还不是很明显,只是对于专业的学习更加勤奋而已. 2.你认为什么是学习?学习有什么用?现 ...