Pay for Hesitation: 最佳化PHP程式碼

Pages

2008年3月21日 星期五

最佳化PHP程式碼

回到家時間比較沒辦法自己掌控 XD (不過我還是七點半就起床囉!!)
那個data.xml你看看是不是這一個: http://140.112.31.185/dl/data.xml

文章出處是這邊:
PHP 效能調校:最佳化你的php程式碼的訣竅

我看了幾項比較可能遇到的
  • 如果 method 可以是 static,那就宣告它為 static。速度的改善可以是4倍。
  • echo 比 print 快多了。
  • 使用 echo 的多個參數用法,不要用 string 的串接。(也就是用逗號,不要用句號)
  • 在迴圈之前設定你的 for 迴圈的極大值,不要在迴圈中。
  • Unset 你的變數來釋放記憶體,尤其是大型陣列。
  • 在 includes 和 requires 中使用完整的路徑,會花費較少的時間在解析 OS 路徑。
  • 當 script 已經開始時,如果如果你需要找出時間(time),$_SERVER['REQUEST_TIME'] 要比time()好的多。
  • 用 strncasecmp、strpbrk 和 stripos 來取代 regex。(有時候多個幾行反而比較快)
  • str_replace 比 preg_replace 快,不過 strstr 又比 str_replace 快四倍。
  • 用 switch 陳述式會比多個 if ... else if 好的多。
  • 用@來做錯誤抑制非常慢。
  • 打開 apache的 mod_deflate。
  • 當你完成資料庫相關操作時,關閉你的資料庫連結。
  • 錯誤訊息非常昂貴。
  • 在 for 迴圈中不要使用函式,例如:for($x=0; $x <>
  • 一般而言 for 會比 foreach 快,但當迴圈裡的元素(element)大時,有時 foreach 會稍快一些。
  • 遞增一個 global 變數比 local 變數慢二倍。
  • 遞增一個 object property(e.g., $this->prop++)會比 local 變數慢上三倍。
  • 遞增一個未定義的 local 變數會比一個預先初始化的變數慢上 9-10 倍。
  • 以單引號括住字串會比以雙引號(")括住字串快一丁點,因為 PHP 會對 "..." 查找變數,而不會對 '...'。當然囉,只當你在字串中沒有變數時,才可以這麼做。(少寫含糊不清的雙引號(""),是字串就用單引號)
  • 儘量減少型別轉換和判斷。
  • 使用 PHP 快取的產品。(jiing:如 xcache, php_apc)
  • 快取多多益善。用 memcached。
  • 可以用 isset() 來取代 stelne($str)。
    • if (strlen($foo) <>
    • if (!isset($foo{5})) { echo "Foo is too short"; }
  • 在 PHP 裡,++$i 比 $i++ 快一點。
  • 不需要每件事都 OOP,通常它是過度負載(overhead),每個 method 和物件呼叫花費很多的記憶體。
  • 不要實作每個資料結構成 class,array 也很有用。
  • 不要過度切分 method,思考哪些程式碼是你真的將會重覆使用的。
  • 如果有一堆字串結合後不斷輸出的動作,可以考慮使用 ob_start() 相關的函式。

沒有留言: