一篇關於PHP性能的文章

一篇關於PHP性能的文章

昨晚清理瀏覽器收藏夾網址時,發現了http://www.phpbench.com/,想起來應該是2015年發現的一個比較性能的文章,我就點進去看了看,發現仍是全英文耶,恰好最近一直在讀一些英文文檔和資料,就想着把它翻譯下來,以供其餘中國開發更有效率的閱讀,好多自個人口語化,見諒~php

PHPBench.com 想用一種直觀的方式去陳述一個事實,讓人們明白不是每段PHP代碼都能以相同的方式運行。你可能會對產生的結果感到驚訝,可是不要懷疑--it's ok。一些被測試統計過的代碼樣例的頁面也被建立了,你能夠下載而後在本身的服務器環境運行測試,你能夠結合本身的想法,對這些實例進行一頓操做~~html

注意:你要時刻記住要多刷新幾回頁面來獲得正確的結果,每次刷新的時候,數字都會急劇變化,我認爲這是由於PHP的內存垃圾回收機制是隨機的而且這個機器上其餘的進程對此也有影響。數組

注意:爲了方便我就簡單的使用了microtime()函數來測試這用例。若是使用了更高級的東西,我擔憂一些初級phper理解不了。瀏覽器

循環讀取數據的比較

foreach() vs. for vs. while(list() = each())
  • 循環讀取一個哈希數組最好的方式是怎樣的?
  • 給出一個含有100個元素的哈希數組,每一個鍵值對是由24字節的鍵名和10k的數據組成
    服務器

    結論:

  1. 上面全部結果中,我發現,foreach()循環比while()for()強一檔的水平。有一點值得注意下,全部樣例中每一個循環開始的時候我都會使用reset()
  2. 因爲以前測試的版本備受爭議,我必須道個歉,由於我在while循環實施reset()功能的時候是在最開始而不是結束時。很是感謝Anthony Bush這位老鐵發現了這個。

修改下循環方式再來一波比較

  • 若是咱們改變讀取循環的測試,改變爲:循環讀取數組結果後,對每一個元素進行簡單的從新賦值。它會又怎樣一個結果表現呢?
  • 仍是給出一個含有100個元素的哈希數組,每一個鍵值對是由24字節的鍵名和10k的數據組成
    函數

    結論:

  1. foreach()依然吊打其餘兩位循環選手

計數循環之間的PK

for() VS. while()
  • 循環時提早算好循環體的長度有沒有必要
  • 好比: "for ($i=0; $i<$size; $i++)" instead of "for ($i=0; $i<sizeOf($x); $i++)"
    性能

    結論:

  1. *結果讓人吃驚...這在任何程序中都是很容易去實現的一件事情,也是PHP社區廣泛承認的基準,結果代表他們都是爲了本身說話。

雙引號單引號的較量

double (") vs. single (')
  1. PHP中單引號和雙引號效率上是否有區別呢? 好比重複使用10000屢次時
    測試

    結論:

  2. *在當前的PHP版本中,這個條件下兩邊表現都是不俗的。讓你們在這一點上和諧相處!ui

變量檢測的較量

isSet() vs. empty() vs. is_array()

結論:

  1. *isset()和empty()差很少的,所以使用變量以前,儘可能檢查一波。例如:if (isSet($foo) AND is_array($foo))

條件控制結構的較量

switch/case/default vs. if/elseif/else
  • 這兩種流程控制結構有啥區別呢?
    翻譯

    結論:

  1. *switch/case 和 if/elseif 棋逢敵手五五開,須要注意的是if/elseif 中用全等(===)比相等(==)要稍微快一些哦~

字符串輸出比較

echo vs. print

結論:

  1. *實際上,echo 和 print 函數/結構服務很明確,所以實現他們的代碼差很少。值得一提的是:在使用echo 時,用逗號分隔時,會快一些。

做者:fredGui

*來源:http://www.cnblogs.com/guixiaoming/p/8534224.html

著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索