《PHP 代碼優化測試(Benchmark數據測試)》要點:
本文介紹了PHP 代碼優化測試(Benchmark數據測試),希望對您有用。如果有疑問,可以聯系我們。
Benchmark
測試之前我們先來了解Benchmark.
直接下載:http://pear.php.net/package/Benchmark/download
Benchmark工具類包共有三個文件,分別是Timer.php、Iterate.php和Profiler.php,三個工具類功能相同,只是側重點分歧,都是用于調試代碼獲取程序的執行時間.
1,Benchmark_Timer類原理與通過microtime函數獲取微秒時間再比擬前后兩個時間值的差相同.
2,Benchmark_Iterate類用于調試函數的平均執行光陰.
3,Benchmark_Profiler類用于統計代碼和函數的執行時間以及函數的挪用次數.
我們用它來測試執行結果,使用它必要安裝pear
1) $row['id'] =0比 $row[id]=0 快,次數越年夜越明顯/生產環境(Linux)下測試1個數量級;
首先來測試直接寫id的環境:
測試成果:
而當我們把$arr[id] = 0; 改為
測試成果為:
可以看到,提升速度比擬明顯,因此,我們要規范數組的字段,不能寫有風險的代碼,$arr[id]這樣子寫有很大的風險.
2) 遞增(遞減)一個預預定義的局部變量要比遞增(遞減)一個未定義的局部變量快;差異較大
還是上述的代碼,循環部門我們改為:
執行耗時為:
而我們改為:
執行耗時:
耗時縮減挺多
3)在可行的情況下,避免使用正則表達式,str_replace 函數比 preg_replace,差異還是很明顯的
首先來看使用正則的環境下:
耗時:
而使用:
耗時會削減挺多:
同樣我們可以延伸出,盡量使用php的函數去完成功能,那些函數底層c都是經過優化的,執行效率比擬高.即:盡量采用PHP內置函數,且選擇效率高的函數
4)在有需要的時候使使用引用(&),測試差別較大,接近1個數量級
引用的話,就不消像正常傳遞變量那樣,復制多一個變量, 而是直接使用地址即可.
我們先不消引用:
耗時:
而當我們在循環中改為:
耗時為:
光陰上縮小了很多.
5 ) 判斷字符串長度時,可用isset($str{15})代替strlen($str) < 15;因為isset()作為一種語言布局,而strlen()是函數,語言布局快于函數;
使用strlen($str)函數來斷定,代碼如下:
執行耗時:
而當我們使用
斷定,將會加快很多,執行耗時:
6 ) $_SERVER['DOCUMENT_ROOT']代替str_replace('//','/',dirname(__FILE__) .'/') ; wamp測試無太大差異/Linux生產環境測試性能提升 500% (5倍)
首先我們先用 $path = str_replace('//','/',dirname(__FILE__) .'/'); 測試:
執行耗時:
當改為:
執行耗時:
幾乎不在毫秒級別內.耗時少許多.
7 ) 獲取Unix時間戳時用$_SERVER['REQUEST_TIME'] 取代time(); 測試性能提升很多
首先我們使用time() 來獲取:
執行耗時:
而改為:
的時候,執行耗時減少許多:
幾乎不在毫秒級別內
其實還有很多其他的各類優化小細節,例如:
* foreach函數,沒有用到鍵的時候,就不要加鍵.
* include 文件時盡量使用絕對路徑,因為它避免了 PHP 去 include_path 里查找文件的速 度,解析操作系統路徑所需的時間會更少.【測試差異其實不明顯】
* 用單引號(’’)代替雙引號(””),單引號為強類型,將其中的所以字符都認作字符,而雙引號的為弱類型,它會檢測其中是否存在變量 【測試差異不大,但是用雙引號有風險】
* Apache 處理 PHP 腳本的速度要比靜態頁面慢 2-10 倍,因此盡量采用多的靜態頁面,少的腳本;PHP程序使用文件緩存性能會倍增【不消測試我們也知道,測試速度快很多】;
* 一般不建議啟用auto_start(session.auto_start:是否自動啟用) ,因為創建Session必要消耗系統資源,我們通常只會在必要用到Sesson時,才會使用session_start函數來開啟Session功能.
優化無盡頭.............................................................
歡迎參與《PHP 代碼優化測試(Benchmark數據測試)》討論,分享您的想法,維易PHP學院為您提供專業教程。