遅延読み込みとは何ですか?
[いくつかの回答を読んで編集してください]なぜ人々はこの用語をそれほど頻繁に使用するのですか?
ASP / ADOレコードセットを使用して、グリッドビューのデータまたはADO.NETデータソースをロードするとします。
なぜ人々がレイジーローディングという用語を使用するのか、「他の」タイプは何ですか?
遅延読み込みとは何ですか?
[いくつかの回答を読んで編集してください]なぜ人々はこの用語をそれほど頻繁に使用するのですか?
ASP / ADOレコードセットを使用して、グリッドビューのデータまたはADO.NETデータソースをロードするとします。
なぜ人々がレイジーローディングという用語を使用するのか、「他の」タイプは何ですか?
回答:
レイジーローディングと呼ばれるのは、レイジーな人のように、したくないことを先延ばしにしているからです。反対はEager Loadingで、必要になる前にすぐに何かをロードします。
人々が遅延読み込みを使用する理由に興味がある場合は、起動に非常に時間がかかるアプリケーションを検討してください。このアプリケーションは、多くの熱心な読み込みを行っています...ディスクからの読み込み、計算など、必要になるずっと前のことです。
これを遅延読み込みと比較すると、アプリケーションの起動ははるかに速くなりますが、長時間の実行負荷を必要とする何かを初めて行う必要がある場合、初めて読み込まれるときに少し休止することがあります。したがって、遅延ロードを使用すると、アプリケーションの実行中にロード時間を償却します。実際には、ユーザーが使用する予定のないものをロードすることから節約できます。
遅延読み込みとは、オブジェクトユニットの読み込みを、必要なところまで遅らせるという概念です。オブジェクトを不必要にロードするのではなく、必要に応じて単純な言葉でオブジェクトをロードします。たとえば、「Orders」オブジェクトが集約されている「Customer」クラスがあるとします。したがって、顧客データをロードするのが好きですが、アプリケーションで必要になるまで遅延させたい注文オブジェクトです。
以下は、遅延読み込みの使用方法、遅延読み込みの実装方法、およびその利点と欠点を示すYouTubeビデオです。
ウィキペディアの定義遅延読み込みは、オブジェクトの初期化を必要な時点まで延期するためにコンピュータープログラミングで一般的に使用される設計パターンです。...
遅延読み込みという用語は通常、オブジェクトリレーショナルマッパーについて話すときに使用されます。ADO.NETを直接使用する場合、常に熱心にロードされます(つまり、常に指定したものだけがロードされます)。
nHibernateのようなORマッパーは、データにアクセスした場合にのみ、適切なデータで「入力」されるプロキシオブジェクトを返すことをサポートします。この方法では、実際に使用するデータのみをロードします。これは、データベースからロードできるオブジェクト間に多くの関係を指定する場合に便利な機能です。ORマッパーがすべての関連オブジェクトや関連オブジェクトに関連するオブジェクトなどをロードする必要はありません。その結果、データベース全体がロードされる可能性があります。
この問題は、オブジェクトモデルを注意深く設計することでも防ぐことができます。(集計を使用し、ドメイン駆動設計のように集計ルートのみを読み込むことは、遅延読み込みを使用せずにこれを回避する方法です)。
遅延読み込みにより、またはマッパーが必要なすべてのデータを一度に取得する代わりに、多数の小さなデータベースアクセスを実行する可能性があります。これもパフォーマンスの問題を引き起こす可能性があります。
これが私が書いた実際のPythonコードの例です。
class Item(Model):
...
@property
def total(self):
if not hasattr(self, "_total"):
self._total = self.quantity \
+ sum(bi.quantity for bi in self.borroweditem_set.all())
return self._total
基本的に、私はインベントリ内のアイテムを表すItemクラスを持っています。私たちが持っているアイテムの総数は、私たちが所有しているアイテムの数と、さまざまなソースから借りているすべてのアイテムの合計です。これらの数値はすべてデータベースに保存されており、合計が実際に要求されるまでこれを計算しても意味がありません(合計が要求されずにアイテムが使用されることが多いため)。
したがって、totalプロパティは_totalフィールドが存在するかどうかを確認します。そうでない場合、プロパティコードはデータベースにクエリを実行してそれを計算し、次に値が_totalフィールドに格納されるので、次にリクエストされたときに再計算する必要はありません。
遅延読み込み:不要なもので時間(またはメモリ)を無駄にすることはありません。その後、必要なときに時間がかかりますが、それで問題ありません。
人生の例:フランス語の慣用句を実際に学習する代わりに、必要に応じて一度に1つずつ学習します。これはいつ意味がありますか?フランスに短期滞在するだけの場合(つまり、多くのフレーズを必要としない場合)、またはすぐに出発する必要がある場合。2年間滞在している場合や、長い時間をかけて勉強している場合は、フレーズ集全体を事前に学習する方がはるかに効率的です(積極的な読み込み)。
[ WKRPでヴィーナスによってギャング用語で教えられたアトムに触発されました。]
はデザインパターンです。
遅延読み込み:コードで特定のオブジェクトによる操作が必要になるまで、オブジェクトは初期化されません。初期化されると、オブジェクトは再初期化されませんが、以前に初期化されたオブジェクトが使用されます。
これにより、コードがはるかに効率的になり、メモリ使用量の管理に役立ちます。
遅延読み込みの適用例:
Ghost Lazy初期化値ホルダー
遅延読み込みのいくつかの利点:
geeksforgeeksによると、遅延読み込みはソフトウェア設計パターンであり、オブジェクトの初期化は実際に必要な場合にのみ発生し、使用の単純さを維持してパフォーマンスを向上させるために以前は発生しません。