CodeIgniter 使用手冊版本 2.1.4


Benchmarking 類別

CodeIgniter 的 Benchmarking 類別為常駐載入,用於計算兩個不同時間點間的效能差異。

注意: 此類別會自動載入,所以不需要自行手動載入。

附帶說明,這個 benchmarking 類別常常是在 framework 被要求啟動時開始運作,然後在收 到 optput 類別送出最後的 view 給瀏覽器之前結束運作,所以可以精準算出目前系統的運算耗時量。

目錄

使用 Benchmark 類別

Benchmark 類別可以使用在 控制器(controllers)檢視(views),或者在 模型(Models) 裡頭. 使用的方法如下:

  1. 標記一個起始點
  2. 標記一個結束點
  3. 執行 "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}