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/php7ln -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.phpreal 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這剛出手,就名不虛傳,響應時間在php7下執行變為原來的1/4。真牛!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
那我還得搞倆試試,第二段,還是上面的這個方式,不過由於速度較慢,所以變成了乙個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吊咋天,有沒有!速度整整提高了將近7倍。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
筆者激動的心情難以言表,順手又整了乙個比較高效的素數演算法。算出2000000以內的素數的數目,
這次咱們 php7先開始。
[root@localhost test]# time php7 prime_v3.php 2000000prime 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 2000000prime 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 已經定義...