《PHP實例:PHP7正式版測試,性能驚艷!》要點:
本文介紹了PHP實例:PHP7正式版測試,性能驚艷!,希望對您有用。如果有疑問,可以聯系我們。
我們今天就來看一下PHP 7正式版的算法和 wordpress 應用在其上的性能表現.PHP教程
PHP7 的安裝,真是非常地向下兼容,下載,解壓,把之前的配置命令用上,一路回車下去,毫無違和感.為了不影響現有的環境的運行,所有專門開辟了目錄 .PHP教程
配置參數如下:PHP教程
--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).PHP教程
安裝好之后,做上軟鏈接:PHP教程
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 看到了我們熟悉的提示:PHP教程
[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.PHP教程
隨便寫了三段程序:PHP教程
第一段,生成一個 60 萬元素的數組,通過查找key 的方式,來確定key是否存在.PHP教程
<?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 版.PHP教程
[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 版.PHP教程
[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代碼:PHP教程
<?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 登場了.PHP教程
[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先開始.PHP教程
[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倍之間.PHP教程
[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
此素數算法如下,用的是篩選法.相對是運行速度比較快的求素數算法.PHP教程
<?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教程
一輪測試下來,激發起了筆者對PHP 7更多了解的興趣,想看看擴展和一些常見的框架支持如何,順手做了如下兩個測試.PHP教程
記得在Alpha1版本的時候,OneAPM是不能支持的,這次行不行呢?筆者拿到 OneApm_php_Agent_1.0.0.18.tar 版,順利安裝.PHP教程
PHP教程
成功地識別了PHP 7的安裝路徑.PHP教程
PHP教程
安裝成功.PHP教程
對于擴展,我是沒有信心再測下去了,下面測兩個常用的東東,一個是Wordpress,雖然網站被和諧了,但是是什么地球人都知道吧.另外一個是ThinkPHP, 這是國內使用量最廣泛的PHP開發框架,絕對第一,不是之一.筆者也是TP的粉絲.PHP教程
?是該夸這兩個軟件做得好呢?還是該夸 PHP 7的兼容做得好呢,我也不知道了,反正小編看到了初步正常.
Wordpress 后臺,在PHP 7 做為 FastCGI 后端時,運行正常.PHP教程
PHP教程
ThinkPHP 最新版本3.2.3 在PHP 7 下運行正常.PHP教程
PHP教程
最后我們來做一個壓力測試,兩個wordpress,一個是基本為空的剛剛安裝的版本,一個是發布了數篇文章的版本,我們針對主頁進行測試.分別在PHP5.5和PHP7下進行測試,并且兩者都分別打開和關閉Zend OpCache,看看響應性能是否有明顯變化.
1、PHP 5.5.26 無Zend Opcache 有文章版,20個并發PHP教程
PHP教程
2、PHP 5.5.26 無Zend Opcache 有文章版,10個并發PHP教程
PHP教程
3、PHP 5.5.26 無Zend Opcache 無文章版,20個并發PHP教程
PHP教程
4、PHP 5.5.26 無Zend Opcache 無文章版,10個并發PHP教程
PHP教程
可見并發并沒有對總時間造成影響,有文章相比無文章,總時長慢了6S,平均慢了20%.
下面我們打開PHP 5.5.26 的Zend OpCache.
PHP教程
1、PHP 5.5.26 有Zend Opcache 有文章版,20個并發PHP教程
PHP教程
2、PHP 5.5.26 有Zend Opcache 有文章版,10個并發PHP教程
PHP教程
3、PHP 5.5.26 有Zend Opcache 無文章版,20個并發PHP教程
PHP教程
4、PHP 5.5.26 有Zend Opcache 無文章版,10個并發PHP教程
PHP教程
可見,是否開啟Zend OpCache,對性能影響極為明顯.對有文章版有2倍以上提升,對無文章版有4倍以上提升.PHP教程
下面我們來測試PHP7,同樣第一次是無Zend OpCache的版本.
1、PHP 7 無Zend Opcache 有文章版,20個并發PHP教程
PHP教程
2、PHP 7 無Zend Opcache 有文章版,10個并發PHP教程
PHP教程
從以上數據可見,在PHP7 對比PHP5.5.26有30%左右的性能提升,再來看一下無文章版.
PHP教程
3、PHP7 無Zend Opcache 無文章版,20個并發PHP教程
PHP教程
4、PHP 7 無Zend Opcache 無文章版,10個并發PHP教程
PHP教程
無文章版對比PHP5.5.26有 60%左右的提升.下面再來看一下開啟PHP7下Zend OpCache的版本.
注意PHP7的Zend OpCache 與PHP5不同,不需要專門安裝擴展,只需要在php.ini中加入如下三行配置即可.
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1PHP教程
1、PHP 7 有Zend Opcache 有文章版,20個并發PHP教程
PHP教程
2、PHP 7 有Zend Opcache 有文章版,10個并發PHP教程
PHP教程
3、PHP 7 有Zend Opcache 無文章版,20個并發PHP教程
PHP教程
4、PHP 7 有Zend Opcache 無文章版,10個并發PHP教程
PHP教程
太無敵了,開啟Zend OpCache,有5倍以上性能提升,而對比同樣開啟Zend OpCache的5.5.26,也至少有3倍以上的性能提升.可以說Zend OpCache對高并發下的性能至為關鍵.PHP教程
PHP7性能的評測就到這里,從6月份推出PHP7 alpha版以來,我們很欣喜地等來了PHP7正式版的發布.再次評測證明,PHP7,值得你的擁有,OneAPM for PHP 能夠深入到所有 PHP 應用內部完成應用性能管理和監控,包含代碼級別性能問題的可見性、性能瓶頸的快速識別與追溯、真實用戶體驗監控、服務器監控和端到端的應用性能管理.而開啟了Zend OpCache 的PHP7和OneAPM,更是值得你來熱烈擁有.PHP教程
《PHP實例:PHP7正式版測試,性能驚艷!》是否對您有啟發,歡迎查看更多與《PHP實例:PHP7正式版測試,性能驚艷!》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8286.html