ベンチマーククラス
CodeIgniter には、常時アクティブなベンチマーククラスがあります。 ベンチマーククラスは、あらかじめマークしておいた複数の観測点のうちの任意の2つの時点の時間差を計算できます。
Note: このクラスは、システムで自動的に初期化されるので、手動で初期化する必要はありません。
さらに、ベンチマークは、フレームワークが呼び出される瞬間に必ず開始され、 出力クラスがブラウザに最後のビューを送信する直前に終わるので、 非常に正確なタイミングで全システムの実行について示すことができます。
目次
ベンチマーククラスを使用する
ベンチマーククラスはコントローラ、ビューまたはモデル の中で使用できます。使う手順は次のとおりです:
- 観測開始点をマークします。
- 観測終了点をマークします。
- 結果を見るため「経過時間("elapsed time")」メソッドを実行します。
実際のコードでの使用例です:
$this->benchmark->mark('code_start');
// ここに何かのコードを記述
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
Note: "code_start" と "code_end" のところの語は、任意の語が使えます。 これら2つの言葉は、単に観測点を2つ設定するために使われたに過ぎません。好きな言葉を使えますし、重複させて観測点の組み合わせを設定することもできます。次のような例が考えられます:
$this->benchmark->mark('dog');
// ここに何かのコードを記述
$this->benchmark->mark('cat');
// さらに、ここに何かのコードを記述
$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');
プロファイラ用の観測点
プロファイラ でベンチマークデータを使用するには、 観測点はペアにする必要があり、各々の観測点の名前の末尾を _start と _end にしなければなりません。 さらに、ペアになる観測点の名前は、元が同じ(identicaly)である必要があります [ 訳注: ペアになっている開始点と終了点の名前は、末尾の_start _end を除いた部分が同じものでなければなりません ]。 例:
$this->benchmark->mark('my_mark_start');
// ここに何かのコードを記述...
$this->benchmark->mark('my_mark_end');
$this->benchmark->mark('another_mark_start');
// さらに、ここに何かのコードを記述...
$this->benchmark->mark('another_mark_end');
詳しくは、プロファイラのページをご覧ください。
総計実行時間の表示
CodeIgniter がスタートした瞬間から、出力がブラウザに送信された瞬間までの総計の経過時間を表示したいときには、 ビューのテンプレートに次のコードを設置するだけです:
<?php echo $this->benchmark->elapsed_time();?>
上の2つの観測点の計算で、使った関数と引数がないということ以外同じものを使用していることに気づいたと思います。 CodeIgniter では、引数が省略されたとき、最終出力がブラウザに送信されるまでベンチマークは停止しません。 どこで関数を使用したかには関係なく、タイマーは最後の最後まで継続されます。
PHP をそのまま使用したくないときは、ビューのファイル内で次の擬似変数を用いれば、総計経過時間を見る代替手段になります:
{elapsed_time}
Note: ベンチマークをコントローラの関数内で使用する場合は、 必ず開始と終了の観測点をセットする必要があります。
メモリ使用量の表示
PHP の設定が --enable-memory-limit になっている場合、ビューのファイル内に次のコードを配置することで、 システム全体のメモリの使用量を表示させることができます:
<?php echo $this->benchmark->memory_usage();?>
Note: この関数は、ビューのファイル内でのみ使用できます。この使用量は、アプリケーション全体で使っているメモリの使用量です。
PHP をそのまま使用したくないときは、ビューのファイル内で次の擬似変数を用いれば、メモリ消費量を見る代替手段になります:
{memory_usage}