ホームページ  >  記事  >  バックエンド開発  >  CI フレームワークのソース コードの読み取りメモ 5 ベンチマーク テスト BenchMark.php_PHP チュートリアル

CI フレームワークのソース コードの読み取りメモ 5 ベンチマーク テスト BenchMark.php_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:14:55983ブラウズ

CI フレームワーク ソース コード 読書メモ 5 ベンチマーク テスト BenchMark.php

BenchMark は CI にロードされる最初のコア コンポーネントであるため、分析は最初にこのコンポーネントから開始されます。 BenchMark ツールを使用したことのある学生は、これがベンチマーク コンポーネントであることを知っているはずです。 BenchMark であるため、BM コンポーネントの主な機能はプログラムの実行時間、メモリ使用量、CPU 使用量などを記録することであると大胆に推測できます。
このコンポーネントの構造は比較的単純で、マーカー内部変数が 1 つと外部インターフェイスが 3 つだけあります。
1 経過時間
2マーク
3 メモリ使用量
1 つずつ展開してみましょう:
1. マーク
関数の署名は次のとおりです:
関数マーク($name)
この関数は文字列型のパラメータを受け入れ、実装は 1 つの文だけで簡単になります:
$this->マーカー[$name] = microtime();
言い換えれば、この関数は、関数が呼び出された時点を記録するためにのみ使用されます。
コントローラーの特別な処理 (後で詳しく説明します) により、アプリケーション コントローラーで $this->benchmark->mark($name); を使用して実行時間を追加できることに注意してください。ポイント、例:
$this->benchmark->mark("function_test_start");
$this->_test();
$this->benchmark->mark("function_test_end");
print_r($this->ベンチマーク);
このうち、function_test_start と function_test_end は、それぞれ関数呼び出しの開始時点と終了時点を記録するために使用されます
印刷結果:
ここで関数の呼び出し時間を計算するには、BenchMark コンポーネントの 2 番目の関数 elapsed_time を使用する必要があります
2.経過時間
関数の署名は次のとおりです:
関数 elapsed_time($point1 = '', $point2 = '', $小数 = 4)
3 つのパラメータはすべてオプションのパラメータです
(1)。$point1 が空の場合、「{elapsed_time}」を返します
if ($point1 == '') {
'{elapsed_time}' を返します;
}
ナニ!明らかに時間を返すはずですが、代わりに文字列を返します。これは非常に奇妙です (smarty タグに似ています)。実際、Output コンポーネントでは、{elapsed_time} が置き換えられます。ここでは、置き換えメソッドを見てみましょう。
$elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end');
$output = str_replace('{elapsed_time}', $elapsed, $output);
つまり、パラメータが指定されていない場合、この関数を呼び出して実際に取得されるのは、total_execution_time_start時点からtotal_execution_time_end時点までの時間差です。さらに、total_execution_time_start は BM がロードされた後に設定される最初のマーク ポイントであるため (total_execution_time_end は定義されておらず、現在の時点を返します)、この関数が実際に返すのはシステムのロード時間と実行時間です。
(2). 不明なマークポイントが呼び出された場合。結果は不明で、空が直接返されます:
if ( ! isset($this->マーカー[$point1]))
{
戻ります '';
}
(3). $point2 のマークポイントが設定されていない場合は、$point2 のマークポイントを現在の時点に設定します。
if ( ! isset($this->マーカー[$point2]))
{
$this->marker[$point2] = microtime();
}
(4) 返される最後の 2 つのマーク ポイント間の時間差:
list($sm, $ss) =explode(' ', $this->マーカー[$point1]);
list($em, $es) =explode(' ', $this->marker[$point2]);
return number_format(($em + $es) - ($sm + $ss), $Decimals);
前の例も見てください。ここで次のように呼び出すことができます:
echo $this->benchmark->elapsed_time("function_test_start","function_test_end");
関数の実行時間を取得します。
3.メモリ使用量
この関数はシステムのメモリ使用量 (MB 単位) を返します。{elapsed_time} と同様に、この関数によって返される {memory_usage} も出力で置き換えられます。
$memory = ( ! function_exists('memory_get_usage')) ? '0' :round(memory_get_usage()/1024/1024, 2).'MB';
$output = str_replace('{memory_usage}', $memory, $output);
BenchMark コンポーネント自体は比較的単純なので、これ以上の説明は省略します。
最後に、このコンポーネントのソースコードを貼り付けます:
コードをコピー
クラス CI_Benchmark {
/**
* すべてのベンチマーク マーカーと追加時期のリスト
*
* @var 配列
     */
var $mark = array();
/**
* ベンチマークマーカーを設定します
*
* @access public
* @param string $name マーカーの名前
* @return void
     */
関数マーク($name)
{
$this->マーカー[$name] = microtime();
}
/**
* マークされた 2 つのポイント間の時間差を計算します。
* 最初のパラメータが空の場合、この関数は代わりに {elapsed_time} 疑似変数を返します。これによりシステム全体が許可されます
* @access public
* @param string 特定のマークされたポイント
* @param string 特定のマークされたポイント
* @param integer 小数点以下の桁数
* @return mixed
     */
関数 elapsed_time($point1 = '', $point2 = '', $小数 = 4)
{
if ($point1 == '')
{
'{elapsed_time}' を返します;
}
if ( ! isset($this->mark[$point1]))
{
戻る '';
}
if ( ! isset($this->mark[$point2]))
{
$this->marker[$point2] = microtime();
}
list($sm, $ss) =explode(' ', $this->marker[$point1]);
list($em, $es) =explode(' ', $this->marker[$point2]);
number_format(($em + $es) - ($sm + $ss), $decimals)を返します;
}
/**
* メモリ使用量
* この関数は、{memory_usage} 擬似変数を返します。
     */
関数memory_usage()
{
'{memory_usage}' を返す;
}
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/907367.html技術記事 CI フレームワークのソース コードの読み取りメモ 5 ベンチマーク テスト BenchMark.php BenchMark は CI にロードされる最初のコア コンポーネントであるため、分析は最初にこのコンポーネントから始まります。 BenchMark の意味は非常に明確です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。