吊炸天的 PHP 7 ,你值得擁有

2021-09-07 03:57:26 字數 4858 閱讀 9775

2023年的夏天,雖然來得不算火熱,但是在網際網路技術的夏天,比任何一年都更為火熱。

剛剛才結束了

5 月底的網易、支付寶、攜程以及多家雲儲存廠商的接連故障的壞訊息,6月上旬則迎來了程式語言界兩大好訊息,第一件是 swift 2.0 發布以及開源,另一件是 php 7

alpha 版正式發布。這兩件大事,都是可以載入相應的程式語言的史冊級的事件。

swift

2.0 的事,咱先不說了,本文的重點是帶著大家見識一下鳥哥等眾位大神打磨了2年的php 7

,看看是否真的如之前所說的霸氣。以及測試了一下現有軟體和擴充套件的相容性。

--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[root@localhost test]# php7 -v

php 7.0.0alpha1 (cli) (built: jun 13 2015 11:33:39)

隨便寫了三段程式:

第一段,生成乙個 60 萬元素的陣列,通過查詢key 的方式,來確定key是否存在。

<?php

$a = array();

for($i=0;$i<600000;$i++)

foreach($a as $i)

首先是 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++)

foreach($a as $i)

[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。

讓你的PHP7更快 GCC PGO

我們一直致力於提公升php7的效能,上個月我們注意到gcc的pgo能在wordpress上能帶來近10 的效能提公升,這個讓我們很激動.然而,pgo正如名字所說 profile guided optimization 有興趣的可以google 他需要用一些用例來獲得反饋,也就是說這個優化是需要和乙個...

狂拽酷炫吊炸天 用 PHP 協程實現多工協作

php 5.5 中最重要的特性之一就是對協程 coroutine 和生成器 generator 的支援。生成器的特性已經由官方文件和許多博文 比如這一篇和這一篇 講解得很充分了。另一方面,協程受到的關注則較少。這是因為協程的功能相較而言更加強大,但卻難以講解。本文會使用協程實現乙個任務排程器,以此幫...

PHP 7 新特性你知道多少?

1.運算子 null 合併運算子 把這個放在第乙個說是因為我覺得它很有用。用法 a get a 1 它相當於 把這個放在第乙個說是因為我覺得它很有用。用法 a get a 1 它相當於 a isset get a get a 1 我們知道三元運算子是可以這樣用的 a 1 但是這是建立在 a 已經定義...