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