這篇文章帶給大家的內容是關於高效率程式設計:php的最佳化準則,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
少用正規表示式
#str_replace
函數比 preg_replace
快得多,strtr
函數又比 str_replace
來得快。
strpbrk()、strncasecmp()、strpos()、strrpos()、stripos()、strripos()。
字元替換
str_replace 字元替換比正規取代 preg_replace快,但 strtr 比 str_replace 又快1/ 4。
另外,不要做無謂的替換,即使沒有替換,str_replace也會為其參數分配記憶體。很慢!
用 strpos 先找(非常快),看是否需要替換,如果需要,再替換。
如果需要替換,效率幾乎相等,差異在 0.1% 左右。
如果不需要替換:用 strpos 快 200%。
使用$_SERVER變數
#如果你需要得到腳本執行的時間,$_SERVER[' REQUSET_TIME']
優於time()
。
一個是現成就可以直接用,一個還需要函數得到的結果。
使用 $i
遞增
$i的遞增或遞減時,
$i 會比
$i慢一些。
$i更快是因為它只需要3個指令(opcodes),
$i 則需要4個指令。
壓縮大的字串
存入和取出資料庫。
這種內建的函數使用gzip演算法,能壓縮字串90%。
讀取檔案內容
file() 、
fopen()、
feof()、
fgets()等系列方法的情況下,盡量用
file_get_contents()。
echo 輸出
逗號取代點連接符號更快些。
雖然,echo是一種語言結構,不是真正的函數。
、設計不好的自動裝載函數,才會導致其效率的降低.
所以說,盡量避免使用__autoload等魔術方法,有待商榷
#屏蔽敏感資訊
require_once()來加載,能有效的保護敏感的SQL查詢和路徑,在出錯時不被顯示
純PHP程式碼不加結束標記
?>。
這可以避免在 PHP 結束標記之後萬一意外加入了空格或換行符,會導致 PHP 開始輸出這些空白,而腳本中此時並無輸出的意圖。
永遠不要使用register_globals和
magic quotes
舊版的PHP在安裝時會預設開啟這兩個功能,這會造成安全漏洞、程式錯誤及其他的問題。
如只有使用者輸入了資料時才會建立變數等。
PHP5.4.0開始這兩個功能都被捨棄了,所以每個程式設計師都應該避免使用。
如果你過去的程式有使用這兩項功能,那就盡快將其剔除吧。
和require
中盡量使用絕對路徑。 如果包含相對路徑,PHP會在
裡面遍歷尋找檔案。用絕對路徑就會避免這類問題,解析路徑所需的時間會更少。 <p>盡量不要用<code>require_once
和include_once
包含文件,它們多一個判斷文件是否被引用的過程,能不用盡量不用。
而使用require
、include
方法來代替。
函數快於類別方法
#呼叫只有一個參數、且函數體為空的函數,花費的時間等於7-8
次$localvar
運算。
而相同函數的類別方法大約是15次$localvar
運算。
用子類別方法
#基底類別裡面只放能重複使用的方法,其他功能盡量放在子類別中實現,子類別裡方法的效能優於在基底類別中。
引用傳遞參數
#透過參數位址引用的方式,實作函數多個回傳值,這比按值傳遞效率高。方法是在參數變數前面加個 &
。
盡量靜態化
#如果一個方法能被靜態,那就宣告它為靜態的,速度可提高1/4
,甚至我測試的時候,這個提高了近三倍。
靜態和非靜態方法的效率主要差異在記憶體。靜態方法在程式開始時產生內存,實例方法(非靜態方法)在程式運行中產生記憶體。
所以,靜態方法可以直接調用,實例方法要先成生實例再調用,靜態速度很快,但是多了會佔記憶體。
任何語言都是對記憶體和磁碟的操作,至於是否面向對象,只是軟體層的問題,底層都是一樣的,只是實作方法不同。
靜態記憶體是連續的,因為是在程式開始時就產生了,而實例方法申請的是離散的空間,所以當然沒有靜態方法快。
靜態方法總是呼叫同一塊內存,其缺點就是不能自動進行銷毀,而實例化可以銷毀。
以上是高效率程式設計:php的最佳化準則介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!