「レイジーローディング」デザインパターンについて読みました。レイジーローディング?それを避ける方がいいですか?
すべてのクラスをロードするために遅延読み込みを過剰に使用しても、include(..)
を完全に忘れていませんか?
このアプローチの欠点は何ですか?
「レイジーローディング」デザインパターンについて読みました。レイジーローディング?それを避ける方がいいですか?
すべてのクラスをロードするために遅延読み込みを過剰に使用しても、include(..)
を完全に忘れていませんか?
このアプローチの欠点は何ですか?
カップルのポイント:
あなたはいつも のすべてのファイルを含めて対自動ロード を使って素敵なパフォーマンス 改善を見ることができますすべての時間 (ファイル数が が成長し、特にとして、より大きく、より大きく)。
自動ロードを実装
は、__autoload()
より spl_autoload_register()
を使用することをお勧め です。人々はPHPでの遅延ロードについて話すとき、多くの時間が、彼らは次のようなものについて話しているものの:
class Foo {
protected $bar = null;
public function getBar() {
if ($this->bar == null) {
$this->bar = ExpensiveOperation();
}
return $this->bar;
}
}
それが実際に使用する必要があるとき、あなたは唯一のプロパティを読み込みますオブジェクトをインスタンス化するたびにではなく、潜在的にいくつかのメリットがあります。
明示的なインクルードを使用するか、__autoload()
クラスを見つけても問題ありません。どちらにしても。
ただし、2つの戦略を組み合わせることはお勧めしません。 include
行は不要です。
レイジーローダーのメリットの1つは、実行中にスクリプトが実際に必要とするクラスファイルのみを読み込み、メモリを節約できることです。それ以外の場合は、クラスファイルが必要かどうかにかかわらずすべてのクラスファイルを含めることができます。あなたのスクリプトに応じて、これはかなり異なることがあります。自動ロードの
これは確かに**レイジーローダーの**メリットですか? –
@Will - 長いリストのインクルードは、もう1つの大きなメリットとなり、新しいクラスを追加するたびにリストに追加する必要はありません。メモリ/パフォーマンスの向上は確かに主要な利点です。また、include_onceのオーバーヘッドを防ぎますが、重複を心配する必要はありません。 –
+1はspl_autoload_register()に含まれます。 –