Benchmarking 類別
CodeIgniter 的 Benchmarking 類別為常駐載入,用於計算兩個不同時間點間的效能差異。
注意: 此類別會自動載入,所以不需要自行手動載入。
附帶說明,這個 benchmarking 類別常常是在 framework 被要求啟動時開始運作,然後在收 到 optput 類別送出最後的 view 給瀏覽器之前結束運作,所以可以精準算出目前系統的運算耗時量。
目錄
使用 Benchmark 類別
Benchmark 類別可以使用在 控制器(controllers) , 檢視(views),或者在 模型(Models) 裡頭. 使用的方法如下:
- 標記一個起始點
- 標記一個結束點
- 執行 "elapsed time" 函數來看結果
這裡有個實際範例:
$this->benchmark->mark('code_start');
// Some code happens here
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start','code_end');
注意: 裡頭 "code_start" 和 "code_end" 的值沒有限制。就只是簡單的用來標記的兩個字而已。你可以使用任何想用的字,以及你也可設定多組標記點。請看看這個參考範例:
$this->benchmark->mark('dog');
// Some code happens here
$this->benchmark->mark('cat');
// More code happens here
$this->benchmark->mark('bird');
echo $this->benchmark->elapsed_time('dog','cat');
echo $this->benchmark->elapsed_time('cat','bird');
echo $this->benchmark->elapsed_time('dog','bird');
Benchmark 點的效能分析
若要讓你的 benchmark 資料可被效能分析器(Profiler)所用,你的所有表記點必須成對設定(set up in pairs)。而且每個標記點的名稱必須以 _start 以及 _end 來作為結尾。同時,每個標記點名稱必須為獨一無二。參考範例:
$this->benchmark->mark('my_mark_start');
// Some code happens here...
$this->benchmark->mark('my_mark_end');
$this->benchmark->mark('another_mark_start');
// Some more code happens here...
$this->benchmark->mark('another_mark_end');
請閱讀 效能分析器(Profiler page) 來取得更多資訊。
顯示全部的執行時間
若要顯示從 CodeIgniter 啟動到最後資料送至瀏覽器的所有時間耗用量,只需更改在檢視樣板(view templates)中的部份:
<?php echo $this->benchmark->elapsed_time();?>
你會發現到,在上面計算兩標記點的範例也是使用相同函數,只是你沒有使用任何參數。當沒有使用到參數的時候,CodeIgniter 不會停止 benchmark,直到最後的輸出送給瀏覽器。不論在何處呼叫此函數,計時器會在最後才結束。
假如你比較不願意使用純粹的 PHP 的話,在檢視檔秀出時間耗用量的其他方式,就是使用虛擬變數(seudo-variable):
{elapsed_time}
注意: 若要 benchmark 來衡量控制器內所有函數的話,你必須自行設定起點/終點。
顯示記憶體消耗量
若你的 PHP 安裝有啟用 --enable-memory-limit 的話,你可以將底下的程式碼置於你的檢視檔中,來顯示記憶體消耗量:
<?php echo $this->benchmark->memory_usage();?>
注意: 這個函數只可用於檢視檔(view files) 該消耗量會反映出目前 app 所使用的總記憶體。
假如你比較不願意使用純粹的 PHP 的話,在檢視檔秀出記憶體使用量的其他方式,就是使用虛擬變數(seudo-variable):
{memory_usage}