前回のブログ(CIフレームワークのソースコード読解メモ4 ブートファイルCodeIgniter.php)では、コアプロセスのコアについて見てきました。 CI では、機能はさまざまなコンポーネントによって実行されます。これらのコンポーネントは個々のモジュールに似ており、さまざまなモジュールが相互に呼び出して、CI のコア スケルトンを形成します。
この記事から始めて、各コンポーネントの実装の詳細をさらに分析し、CI コアのブラック ボックスを深く掘り下げていきます (調査の後、実際にはホワイト ボックスであるはずですが、アプリケーションの場合のみブラック ボックスとみなされます)ボックス)をよりよく理解するには、このフレームワークを理解して把握することが最善です。
いつものように、開始する前に、不完全なコアコンポーネント図を CI に貼り付けます:
BenchMark は CI にロードされる最初のコア コンポーネントであるため、分析は最初にこのコンポーネントから始まります。 BenchMark ツールを使用したことのある学生は、これがベンチマーク コンポーネントであることを知っているはずです。 BenchMark であるため、BM コンポーネントの主な機能はプログラムの実行時間、メモリ使用量、CPU 使用量などを記録することであると大胆に推測できます。まずクラス図を見てください:
このコンポーネントの構造は比較的単純で、マーカー内部変数が 1 つと外部インターフェイスが 3 つだけあります。 リーリー
1 つずつ展開してみましょう:
1. マーク
この関数は文字列型のパラメータを受け入れ、実装は 1 つの文だけで簡単になります:
リーリー言い換えれば、この関数は、関数が呼び出された時点を記録するためにのみ使用されます。
コントローラーでの特別な処理 (後で詳しく説明します) により、
$this->benchmark->mark($name);を使用してアプリケーションに追加できることに注意してください。コントローラー 実行時点、例: リーリー そのうち、
function_test_startとfunction_test_endは、それぞれ関数呼び出しの開始時点と終了時点を記録するために使用されます 印刷結果:
ここで関数の呼び出し時間を計算するには、BenchMark コンポーネントの 2 番目の関数 elapsed_time を使用する必要があります
2.経過時間
3 つのパラメータはすべてオプションのパラメータです
(1)。$point1 が空の場合は、「{elapsed_time}」を返しますリーリー ナニ!明らかに時間を返すはずですが、代わりに文字列を返します。これは非常に奇妙です (smarty タグに似ています)。実際、Output コンポーネントでは、
{elapsed_time}が置き換えられます。ここでは、置き換えメソッドを見てみましょう。 リーリー つまり、パラメータが指定されていない場合、この関数を呼び出して実際に取得されるのは、total_execution_time_start
からtotal_execution_time_endまでの時間差です。さらに、total_execution_time_start は BM がロードされた後に設定される最初のマーク ポイントであるため (total_execution_time_end は定義されておらず、現在の時点を返します)、この関数が実際に返すのはシステムのロード時間と実行時間です。 (2) 不明なマークポイントが呼び出された場合。結果は不明で、空が直接返されます:
リーリー (3). $point2 のマークポイントが設定されていない場合は、$point2 のマークポイントを現在の時点に設定します。
リーリー (4) 返された最後の 2 つのマーク ポイント間の時間差:
リーリー 前の例も見てください。ここで次のように呼び出すことができます: リーリー
関数の実行時間を取得します。3.メモリ使用量
この関数はシステムのメモリ使用量 (MB 単位) を返します。
{memory_usage} も出力: に置き換えられます。 リーリー BenchMark コンポーネント自体は比較的単純なので、これ以上の説明は省略します。
最後に、このコンポーネントのソースコードを貼り付けます:
<span>1</span> <span>Elapsed_time </span><span>2</span> <span>Mark </span><span>3</span> Memory_usage
ci フレームワークには mysql バージョンの要件があるのですが、mysql55 を使用するとエラーが報告されるのはなぜですか
Mysql.ciは最新ではありませんが、現在は正常に使用されています。