《PHP實(shí)例:PHP7正式版測(cè)試,性能驚艷!》要點(diǎn):
本文介紹了PHP實(shí)例:PHP7正式版測(cè)試,性能驚艷!,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
我們今天就來(lái)看一下PHP 7正式版的算法和 wordpress 應(yīng)用在其上的性能表現(xiàn).PHP教程
PHP7 的安裝,真是非常地向下兼容,下載,解壓,把之前的配置命令用上,一路回車下去,毫無(wú)違和感.為了不影響現(xiàn)有的環(huán)境的運(yùn)行,所有專門開辟了目錄 .PHP教程
配置參數(shù)如下: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 版本
據(jù)鳥哥建議,使用新一點(diǎn)的編譯器, 推薦 GCC 4.8以上, 因?yàn)橹挥?GCC 4.8以上 PHP 才會(huì)開啟 Global Register for opline and execute_data 支持, 這個(gè)會(huì)帶來(lái)5%左右的性能提升.所以本實(shí)驗(yàn)選用的 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
首先做的是性能評(píng)測(cè),評(píng)測(cè)機(jī)型,首都在線云主機(jī),4核 CPU Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz,內(nèi)存4G,操作系統(tǒng) Centos 6.5.PHP教程
隨便寫了三段程序:PHP教程
第一段,生成一個(gè) 60 萬(wàn)元素的數(shù)組,通過(guò)查找key 的方式,來(lái)確定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`
這剛出手,就名不虛傳,響應(yīng)時(shí)間在PHP7下運(yùn)行變?yōu)樵瓉?lái)的1/4.真牛!
那我還得搞倆試試,第二段,還是上面的這個(gè)方式,不過(guò)由于速度較慢,所以變成了一個(gè)60000個(gè)元素的數(shù)組,查找值.
代碼如下:
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
等待的時(shí)間,總是覺得很漫長(zhǎng),三次測(cè)試,花掉了75秒多.下面,PHP 7 登場(chǎng)了.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倍.
筆者激動(dòng)的心情難以言表,順手又整了一個(gè)比較高效的素?cái)?shù)算法.算出2000000以內(nèi)的素?cái)?shù)的數(shù)目,這次咱們 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`
速度穩(wěn)定在 1.2 S
而 PHP 5.3 呢,這次比上一次的差距小點(diǎn)了,但是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
此素?cái)?shù)算法如下,用的是篩選法.相對(duì)是運(yùn)行速度比較快的求素?cái)?shù)算法.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";
至此,我們基本可以說(shuō)明問題.這些代碼,并沒有使用復(fù)雜的函數(shù)庫(kù),也沒有大量的網(wǎng)絡(luò)和IO,性能卻得到了至少3倍以上的優(yōu)化.這真是一個(gè)歷史性的進(jìn)步.而在我們過(guò)去的性能評(píng)測(cè)中,語(yǔ)言層面的性能,往往是忽略的,為什么這么講呢,比如在 XHProf中,就專門有一個(gè)選項(xiàng),XHPROF_FLAGS_NO_BUILTINS,用于對(duì)內(nèi)置的函數(shù)或者內(nèi)部函數(shù)不做分析,比如數(shù)組、日期等的函數(shù).因?yàn)榇蠹彝e(cuò)過(guò)了這塊的提升空間,當(dāng)然,一般人也無(wú)法在這塊提升,所以才有了 HHVM,也激發(fā)了今天的PHP 7.PHP教程
一輪測(cè)試下來(lái),激發(fā)起了筆者對(duì)PHP 7更多了解的興趣,想看看擴(kuò)展和一些常見的框架支持如何,順手做了如下兩個(gè)測(cè)試.PHP教程
記得在Alpha1版本的時(shí)候,OneAPM是不能支持的,這次行不行呢?筆者拿到 OneApm_php_Agent_1.0.0.18.tar 版,順利安裝.PHP教程
PHP教程
成功地識(shí)別了PHP 7的安裝路徑.PHP教程
PHP教程
安裝成功.PHP教程
對(duì)于擴(kuò)展,我是沒有信心再測(cè)下去了,下面測(cè)兩個(gè)常用的東東,一個(gè)是Wordpress,雖然網(wǎng)站被和諧了,但是是什么地球人都知道吧.另外一個(gè)是ThinkPHP, 這是國(guó)內(nèi)使用量最廣泛的PHP開發(fā)框架,絕對(duì)第一,不是之一.筆者也是TP的粉絲.PHP教程
?是該夸這兩個(gè)軟件做得好呢?還是該夸 PHP 7的兼容做得好呢,我也不知道了,反正小編看到了初步正常.
Wordpress 后臺(tái),在PHP 7 做為 FastCGI 后端時(shí),運(yùn)行正常.PHP教程
PHP教程
ThinkPHP 最新版本3.2.3 在PHP 7 下運(yùn)行正常.PHP教程
PHP教程
最后我們來(lái)做一個(gè)壓力測(cè)試,兩個(gè)wordpress,一個(gè)是基本為空的剛剛安裝的版本,一個(gè)是發(fā)布了數(shù)篇文章的版本,我們針對(duì)主頁(yè)進(jìn)行測(cè)試.分別在PHP5.5和PHP7下進(jìn)行測(cè)試,并且兩者都分別打開和關(guān)閉Zend OpCache,看看響應(yīng)性能是否有明顯變化.
1、PHP 5.5.26 無(wú)Zend Opcache 有文章版,20個(gè)并發(fā)PHP教程
PHP教程
2、PHP 5.5.26 無(wú)Zend Opcache 有文章版,10個(gè)并發(fā)PHP教程
PHP教程
3、PHP 5.5.26 無(wú)Zend Opcache 無(wú)文章版,20個(gè)并發(fā)PHP教程
PHP教程
4、PHP 5.5.26 無(wú)Zend Opcache 無(wú)文章版,10個(gè)并發(fā)PHP教程
PHP教程
可見并發(fā)并沒有對(duì)總時(shí)間造成影響,有文章相比無(wú)文章,總時(shí)長(zhǎng)慢了6S,平均慢了20%.
下面我們打開PHP 5.5.26 的Zend OpCache.
PHP教程
1、PHP 5.5.26 有Zend Opcache 有文章版,20個(gè)并發(fā)PHP教程
PHP教程
2、PHP 5.5.26 有Zend Opcache 有文章版,10個(gè)并發(fā)PHP教程
PHP教程
3、PHP 5.5.26 有Zend Opcache 無(wú)文章版,20個(gè)并發(fā)PHP教程
PHP教程
4、PHP 5.5.26 有Zend Opcache 無(wú)文章版,10個(gè)并發(fā)PHP教程
PHP教程
可見,是否開啟Zend OpCache,對(duì)性能影響極為明顯.對(duì)有文章版有2倍以上提升,對(duì)無(wú)文章版有4倍以上提升.PHP教程
下面我們來(lái)測(cè)試PHP7,同樣第一次是無(wú)Zend OpCache的版本.
1、PHP 7 無(wú)Zend Opcache 有文章版,20個(gè)并發(fā)PHP教程
PHP教程
2、PHP 7 無(wú)Zend Opcache 有文章版,10個(gè)并發(fā)PHP教程
PHP教程
從以上數(shù)據(jù)可見,在PHP7 對(duì)比PHP5.5.26有30%左右的性能提升,再來(lái)看一下無(wú)文章版.
PHP教程
3、PHP7 無(wú)Zend Opcache 無(wú)文章版,20個(gè)并發(fā)PHP教程
PHP教程
4、PHP 7 無(wú)Zend Opcache 無(wú)文章版,10個(gè)并發(fā)PHP教程
PHP教程
無(wú)文章版對(duì)比PHP5.5.26有 60%左右的提升.下面再來(lái)看一下開啟PHP7下Zend OpCache的版本.
注意PHP7的Zend OpCache 與PHP5不同,不需要專門安裝擴(kuò)展,只需要在php.ini中加入如下三行配置即可.
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1PHP教程
1、PHP 7 有Zend Opcache 有文章版,20個(gè)并發(fā)PHP教程
PHP教程
2、PHP 7 有Zend Opcache 有文章版,10個(gè)并發(fā)PHP教程
PHP教程
3、PHP 7 有Zend Opcache 無(wú)文章版,20個(gè)并發(fā)PHP教程
PHP教程
4、PHP 7 有Zend Opcache 無(wú)文章版,10個(gè)并發(fā)PHP教程
PHP教程
太無(wú)敵了,開啟Zend OpCache,有5倍以上性能提升,而對(duì)比同樣開啟Zend OpCache的5.5.26,也至少有3倍以上的性能提升.可以說(shuō)Zend OpCache對(duì)高并發(fā)下的性能至為關(guān)鍵.PHP教程
PHP7性能的評(píng)測(cè)就到這里,從6月份推出PHP7 alpha版以來(lái),我們很欣喜地等來(lái)了PHP7正式版的發(fā)布.再次評(píng)測(cè)證明,PHP7,值得你的擁有,OneAPM for PHP 能夠深入到所有 PHP 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包含代碼級(jí)別性能問題的可見性、性能瓶頸的快速識(shí)別與追溯、真實(shí)用戶體驗(yàn)監(jiān)控、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理.而開啟了Zend OpCache 的PHP7和OneAPM,更是值得你來(lái)熱烈擁有.PHP教程
《PHP實(shí)例:PHP7正式版測(cè)試,性能驚艷!》是否對(duì)您有啟發(fā),歡迎查看更多與《PHP實(shí)例:PHP7正式版測(cè)試,性能驚艷!》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8286.html