PHP程序加速探索之腳本執(zhí)行速度測試
前面有提到,只有找到影響速度的代碼,我們才有可能進(jìn)行優(yōu)化。PEAR的benchmark包中的Benchmark_Timer類和Benchmark_Iterate類,可以用來很方便地測試腳本執(zhí)行的速度。(關(guān)于PEAR的安裝與配置請自行查看相關(guān)資料) 。
首先用Benchmark_Iterate類來測試程序中某個(gè)函數(shù)或類的某個(gè)方法的執(zhí)行時(shí)間。
benchmark1.php
require_once('Benchmark/Iterate.php'); $benchmark = new Benchmark_Iterate();
$benchmark->run(10, 'myFunction','test'); $result = $benchmark->get(); echo '
'; print_r($result); echo ''; exit;
function myFunction($var) { // do something echo 'Hello '; }
?>
建立benchmark Iterate對象$benchmark,這個(gè)對象用來執(zhí)行myFunction函數(shù)10次。
$argument變量每次都傳遞給myFunction. 多次運(yùn)行的分析結(jié)果存入$result,然后用benchmark對象的get()方法來獲取。這個(gè)結(jié)果用print_r()輸出到屏幕。通常會輸出這樣的結(jié)果:
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
Array([1] => 0.000427 [2] => 0.000079 [3] => 0.000072 [4] => 0.000071 [5] => 0.000076 [6] => 0.000070 [7] => 0.000073 [8] => 0.000070 [9] => 0.000074 [10] => 0.000072 [mean] => 0.000108 [iterations] => 10)
myFunction的每次執(zhí)行,benchmark對象都會跟蹤執(zhí)行時(shí)間。并且會計(jì)算平均的執(zhí)行時(shí)間([mean]那一行)。通過多次運(yùn)行目標(biāo)函數(shù),你可以得到該函數(shù)的平均運(yùn)行時(shí)間。
在實(shí)際測試中,函數(shù)的次數(shù)應(yīng)當(dāng)至少1000次左右,這樣可以得到較客觀的結(jié)果。
