You are here: 首頁 架站小知識 [轉]Google犯下錯誤,5條PHP優化建議遭痛批

飛朵啦學習手札

本網站建議使用Firefox2.0以上,或是使用Goole瀏覽器來瀏覽,並使用1024x768解析度來觀看.

[轉]Google犯下錯誤,5條PHP優化建議遭痛批

E-mail 列印 PDF

  自從上次轉貼了[轉]優化PHP代碼的42條建議之後,最近又發現了這篇文章,趕快上來亡羊補牢一下,此文章轉貼自:http://www.mrven.com/?p=478我將會把上一篇文章有錯誤的優化挑出來著名

----------轉文開始------------

首先我承認我有點標題黨了,然後:

近日Google在Google Code下的“Let's make the web faster”網站中,發表了一篇名為“PHP performance tips ”的文章,介紹了一些php性能優化建議,其中:

  1. 不要隨意複製變量
  2. 用單引號表示字符串
  3. 使用echo輸出字符串
  4. 不要在echo中使用點號連接符
  5. 使用switch/case代替if/else

這篇文章發表後沒多久就立刻遭到了一些PHP社區和個人無情的批駁,他們聲稱Google錯了,錯的很徹底,這5條看似有效優化建議其實完全是迷信:

1. 不要隨意複製變量

Zend引擎採用了“寫時復制”機制,這意味著無論你對變量進行多少次復制,真正的複制動作都僅在變量值改變時才發生。

2. 用單引號表示字符串

無數的基準測試已經證明,使用雙引號表示純字符串並不比使用單引號時慢。 有興趣的朋友也可以重複一下這個測試:

php > $blah=”blah”; $s=microtime(true); for($i=0;$i<100000;$i++) “omgwtf$blah\n”; echo microtime(true)-$s; 
0.044615983963013 
php > $blah=”blah”; $s=microtime(true); for($i=0;$i<100000;$i++) 'omgwtf'.$blah.”\n”; echo microtime(true)- $s; 
0.042807102203369

3. 使用echo輸出字符串

根據php所在服務器環境的不同,某些情況下echo會比print()慢。 這裡有一篇echo和print()對比的帖子,對echo和print()的速度進行了測試:http://www.learnphponline.com/php-basics/php-echo-vs-print

4. 不要在echo中使用點號連接符

基準測試證明這又是一條與事實完全相反的建議。 php引擎處理以點號連接(或者使用雙引號)傳遞給echo的變量實際上是更快的。 你可以重複這個測試:

$ php -d implicit_flush=off -r '$s=microtime(true); for($i=0;$i<100000;$i++) echo “omgwtf”,”bbq”,”\n”; echo microtime( true)-$s;' | tail -n 1 
1.071463108062710 
$ php -d implicit_flush=off -r '$s=microtime(true); for($i=0;$i<100000;$i++) echo “omgwtf”.”bbq”.”\n”; echo microtime( true)-$s;' | tail -n 1 
0.44555306434631

5. 使用switch/case代替if/else

這條建議毫無意義。 關於是要使用switch/case還是if/else的問題,其實完全是個代碼風格問題,而它們的效率相差無幾。

一向以技術為長的Google,竟然在技術問題上犯瞭如此錯誤,相當不嚴謹。 PHP小組已經督促文章作者重新仔細審查文章,希望能盡快改掉,以正視聽。

最近更新 ( 週一, 20 七月 2009 12:15 )  
 

新增回應


驗證碼
更新