ベンチマーククラス¶
CodeIgniter には、常時アクティブなベンチマーククラスがあります。 ベンチマーククラスは、 あらかじめマークしておいた複数の観測点のうちの任意の2つの時点の時間差を計算できます。
注釈
このクラスは、システムで自動的に初期化されるので、 手動で初期化する必要はありません。
さらに、ベンチマークは、フレームワークが呼び出される瞬間に必ず 開始され、出力クラスがブラウザに最後のビューを送信する直前に終 わるので、 非常に正確なタイミングで全システムの実行について示す ことができます。
ベンチマーククラスを使用する¶
ベンチマーククラスは:doc:コントローラ </general/controllers> 、 ビュー または:doc:モデル </general/models> の中で使用できます。 使う手順は次のとおりです:
- 観測開始点をマークします。
- 観測終了点をマークします。
- 結果を見るため「経過時間(”elapsed time”)」メソッドを実行します。
実際のコードでの使用例です:
$this->benchmark->mark('code_start');
// ここに何かのコードを記述
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
注釈
“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 にしなければなりません。 さらに、ペアになる観測点の名前は、 元が同じ(identically)である必要があります [ 訳注: ペアになっている開始点と終了点の名前は、末尾の_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}
注釈
ベンチマークをコントローラの関数内で使用する場合は、 必ず開始と終了の観測点をセットする必要があります。
クラスリファレンス¶
- class CI_Benchmark¶
- mark($name)¶
パラメータ: - $name (string) – マーカーにつけたい名前
返り値の型: void
ベンチマークマーカーをセットします。
- elapsed_time([$point1 = ''[, $point2 = ''[, $decimals = 4]]])¶
パラメータ: - $point1 (string) – 特定のマークされた点
- $point2 (string) – 特定のマークされた点
- $decimals (int) – 小数点以下の桁数
返り値: 経過時間
返り値の型: string
2つのマークされた点の時差を計算して、返します。
最初の引数が省略されたとき、 {elapsed_time} 擬似 変数を用いれば、システム全体のテンプレートで示さ れる実行時間を代替し、クラスが実行値をこの変数に 変換して出力します。