PHP程序加速探索之代碼優化
發表于:2007-09-07來源:作者:點擊數:
標簽:
掌握了PEAR::BenchMark,現在你已經知道如何 測試 你的代碼,知道如何判斷你的代碼是快是慢,是哪一部份比較慢。那么接下來我要說的就是如何消滅或優化那部份慢的代碼。 這一點上我個人最主要的經驗只有兩點,一是消除錯誤的或低效的循環;二是優化 數據庫 查
掌握了PEAR::BenchMark,現在你已經知道如何
測試你的代碼,知道如何判斷你的代碼是快是慢,是哪一部份比較慢。那么接下來我要說的就是如何消滅或優化那部份慢的代碼。
這一點上我個人最主要的經驗只有兩點,一是消除錯誤的或低效的循環;二是優化
數據庫查詢語句。其實還存在一些其它的優化細節,比如“str_replace比ereg_replace快”、“echo比print快”等等。這些我暫時都放在一邊,稍后我會提到用緩存來對付過于頻繁的IO。
下面我們將三個功能相同,但程序寫法不同的函數的效率(消耗的時間)進行對比。
badloops.php
<?php
require_once('Benchmark/Iterate.php');
define('MAX_RUN',100);
$data = array(1, 2, 3, 4, 5);
doBenchmark('v1', $data);
doBenchmark('v2', $data);
doBenchmark('v3', $data);
function doBenchmark($functionName = null, $arr = null)
{
reset($arr);
$benchmark = new Benchmark_Iterate;
$benchmark->run(MAX_RUN, $functionName, $arr);
$result = $benchmark->get();
echo '<br>';
printf("%s ran %d times where average exec time %.5f ms",$functionName,$result['iterations'],$result['mean'] * 1000);
}
function v1($myArray = null) {
// 效率很差的循環
for ($i =0; $i < sizeof($myArray); $i++)
{
echo '<!--' . $myArray[$i] . ' --> ';
}
}
|