和我們大多數人一樣,我厭倦了閱讀關於無意義的微優化的部落格文章,例如用echo替換print,用$i 替換 $i,或用單引號替換雙引號。為什麼?因為99.999999%的情況下,它是無關緊要的。您最好安裝像APC這樣的PHP加速器,或是在資料庫列中新增這些缺少的索引,或盡量避免主頁上的1000個資料庫要求。
假設你真的想知道這個問題的答案。與其嘗試編寫一個腳本並執行上百萬次以找到最快的速度,我不如向您展示一些有趣的工具,您可能會發現這些工具有時非常有用,因為它們允許您更好地理解所編寫的PHP程式碼。
輸入VLD,即「Vulcan邏輯反組譯器」。 VLD是由Derrick Rethans編寫的,您可以在VLD主頁上看到,它「與Zend引擎掛鉤,並轉儲腳本的所有操作碼(執行單元)」。
安裝VLD非常簡單。下載最新版本,並像安裝其他PHP擴充功能一樣安裝它:
$ phpize $ ./configure $ sudo make install
在php中啟用擴充功能。 ini檔:
extension=vld.so
是時候看看引擎蓋下面了。建立兩個簡單的文件,一個使用echo,另一個使用print:
// print.php
使用-d vld從命令列執行這些腳本。 activate=1參數啟動VLD輸出,讓我們來看看這些腳本產生的操作碼:
$ php -d vld.active=1 print.php
-
number of ops: 4 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 PRINT ~0 'foo' 1 FREE ~0 2 2 RETURN 1 3* ZEND_HANDLE_EXCEPTION
-
$ php -d vld.active=1 echo.php
-
number of ops: 3 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 ECHO 'foo' 2 1 RETURN 1 2* ZEND_HANDLE_EXCEPTION
發現差異了嗎?是的,print也使用了一個操作碼,因為它實際上返回了一些東西。我們可以得出這樣的結論:echo比print快。但是一個操作碼不需要任何成本,即使一個腳本有數百個呼叫要列印。
因為print總是回傳1,所以您可以做以下有趣的事情,這在echo中是不可能的:
[php]
想知道運行包含很多內容的腳本時執行的操作碼的數量嗎?試試這個:
$ php -d vld.active=1 print.php 2> output $ grep "number of ops" output | cut -f 5 -d ' ' | (tr '\n' +; echo 0) | bc
我嘗試了一個新的Wordpress安裝。腳本在我的筆記型電腦上以一個「總線錯誤」結束之前暫停,但是操作碼的數量已經超過了230萬。
以上是print vs echo,哪一個比較快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!