# :-: PHP 性能優化小技巧:
1. foreach 效率更高,盡量用 foreach 代替 while 和 for 循環。
2. 循環內部不要聲明變量,尤其是對象這樣的變量。
3. 在多重嵌套循環中,如有可能,應當將最長的循環放在內層,最短循環放在外層,從而減少 cpu 跨循環層的次數,優化程序性能。
4. 用單引號替代雙引號引用字符串以實現 PHP 性能優化。
5. 用 i+=1 代替 i=i+1。符合 c/c++的習慣,效率還高。
6. 優化 Select SQL 語句,在可能的情況下盡量少的進行 Insert、Update 操作,達
到 PHP 性能優化的目的。
7. 盡量的少進行文件操作,雖然 PHP 的文件操作效率也不低的。
8. 盡可能的使用 PHP 內部函數。
9. 在可以用 PHP 內部字符串操作函數的情況下,不要用正則表達式。
10. 在可以用 file\_get\_contents 替代 file、fopen、feof、fgets 等系列方法的情況下,盡量用file\_get\_contents,因為它的效率高得多。但是要注意 file\_get\_contents在打開一個 URL 文件時候的 PHP 版本問題。
11. 盡量靜態化如果一個方法能被靜態,那就聲明它為靜態的,速度可提高 1/4,甚至我測試的時候,這個提高了近三倍。當然了,這個測試方法需要在十萬級以上次執行,效果才明顯。
其實靜態方法和非靜態方法的效率主要區別在內存:靜態方法在程序開始時生成內存,實例方法(非靜態方法)在程序運行中生成內存,所以靜態方法可以直接調用,實例方法要先成生實例再調用,靜態速度很快,但是多了會占內存。
任何語言都是對內存和磁盤的操作,至于是否面向對象,只是軟件層的問題,底層都是一樣的,只是實現方法不同。靜態內存是連續的,因為是在程序開始時就生成了,而實例方法申請的是離散的空間,所以當然沒有靜態方法快。
靜態方法始終調用同一塊內存,其缺點就是不能自動進行銷毀,而實例化可以銷毀。
12.echo 效率高于 print因為 echo 沒有返回值,print 返回一個整型。
測試:echo 0.000929 - 0.001255 s (平均 0.001092 seconds)
print0.000980 - 0.001396 seconds (平均 0.001188 seconds)
相差 8%左右,總體上 echo 是比較快的。注意:echo 輸出大字符串的時候,如果沒有調整就會嚴重影響性能。打開Apache 的 mod\_deflate 進行壓縮,或者打開 ob\_start 將內容放進緩沖區可以改善性能問題。
13.盡量的少進行文件操作,雖然 PHP 的文件操作效率也不低的
14.優化 Select SQL 語句在可能的情況下盡量少的進行 insert、update 操作(在 update 上,我被惡批過)。
15.用字符串而不是數組作為參數如果一個函數既能接受數組,又能接受簡單字符做為參數,那么盡量用字符作為參數。例如字符替換函數,參數列表并不是太長,就可以考慮額外寫一段替換代碼,使得每次傳遞參數都是一個字符,而不是接受數組做為查找和替換參數。大事化小,1+1>2。
16.最好不用@用@掩蓋錯誤會降低腳本運行速度,并且在后臺有很多額外操作。用@比起不用,效率差距 3 倍。特別不要在循環中使用@,在 5 次循環的測試中,即使是先用 error\_reporting(0)關掉錯誤,在循環完成后再打開,都比用@快。
17.數組元素加引號$row\['id'\]比$row\[id\]速度快 7 倍,建議養成數組鍵名加引號的習慣。
18 別在循環里用函數
例如:
```
for($x=0; $x < count($array); $x++) {
}
```
這種寫法在每次循環的時候都會調用 count() 函數,效率大大降低,建議這樣:
```
$len = count($array);
for($x=0; $x < $len; $x++) {
}
```
讓函數在循環外面一次獲得循環次數。
進階原因一:最近打算跳槽或明年打算跳槽
進階原因二:一直未漲薪或技術一直沒有提升
進階原因:突破瓶頸或缺乏學習方向