質問
遅延読み込みとは何ですか?
いくつかの答えを読んだ後に編集]なぜ人々はこの用語を頻繁に使用するのですか?
ASP/ADO レコードセットを使用し、グリッドビューのデータまたは ADO.NET データソースをロードするだけだとします。
なぜ遅延読み込みという用語を使用するのか、「他の」タイプは何なのかを尋ねるべきだったと思います。
解決
これは、怠け者のように、やりたくないことを先延ばしにするため、遅延読み込みと呼ばれます。その反対は、必要になるずっと前に、すぐに何かをロードする Eager Loading です。
なぜ遅延読み込みが使用されるのか知りたい場合は、起動に非常に時間がかかるアプリケーションを検討してください。このアプリケーションはおそらく大量の熱心な読み込みを実行しています...ディスクから何かをロードしたり、必要になる少し前に計算などを実行したりできます。
これを遅延読み込みと比較すると、アプリケーションの起動ははるかに速くなりますが、長時間の読み込みが必要な作業を初めて実行する必要がある場合、最初の読み込み中にわずかな一時停止が発生する可能性があります。したがって、遅延読み込みを使用すると、アプリケーションの実行中に読み込み時間を償却することになります。ユーザーが使用する予定のないものを読み込まなくても済む可能性があります。
他のヒント
遅延読み込みは、最初にオブジェクトが必要になったときにのみオブジェクトを読み込みまたは初期化するプログラミング手法です。これにより、特にアプリケーションに多数のコンポーネントがある場合、パフォーマンスが大幅に向上する可能性があります。
いつものように、 ウィキペディア に詳細があります。
遅延読み込みは、必要な時点でオブジェクトの読み込みを遅らせるという概念です。簡単に言うと、オブジェクトを不必要にロードするのではなく、オンデマンドでオブジェクトをロードすることです。たとえば、「Orders」オブジェクトが集約された「Customer」クラスがあるとします。したがって、顧客データはロードしたいが、注文オブジェクトはアプリケーションが必要とするまでロードしたいと考えています。
以下は、遅延読み込みの使用方法、遅延読み込みの実装方法、およびその利点と欠点を示す YouTube ビデオです。
Wikipediaの定義Lazy Loadingは、コンピュータープログラミングで一般的に使用されているデザインパターンであり、必要なポイントまでオブジェクトの初期化を延期するためです。...
遅延読み込みという用語は通常、オブジェクト リレーショナル マッパーについて話すときに使用されます。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 でヴィーナスがギャング用語で教えたアトム.]
遅延読み込みとは、データベースで頻繁に使用される用語で、必要な情報の一部を必要なときにのみ読み込むという概念を指します。
つまり、複数のテーブルを結合したレコードが必要だとします。すべてを一度にフェッチすると、たとえばメインテーブルのみをフェッチする場合よりも時間がかかります。遅延読み込みを使用すると、残りの情報は必要な場合にのみ取得されます。したがって、特定のシナリオでは実際に「効率的な読み込み」が行われます。
他のタイプの「ロード」は次のとおりです。
- Eager Loading - 接続されているすべてのテーブルを一度にロードします。
デザインパターンです。
遅延読み込み:コードで特定のオブジェクトによる何らかの操作が必要になるまで、オブジェクトは初期化されず、一度初期化されると、オブジェクトは再初期化されず、以前に初期化されたオブジェクトが使用されます。
これにより、コードの効率が大幅に向上し、メモリ使用量の管理が容易になります。
遅延読み込みのアプリケーション例:
ゴースト怠zyな初期化値ホルダー
遅延読み込みの利点のいくつかは次のとおりです。
- アプリケーションの起動時間を最小限に抑えます。
- オンデマンド読み込みのため、アプリケーションが消費するメモリが少なくなります。
- サーバーへの不要なリクエストを回避します。
遅延読み込みの例としては、Web ページ上の大量のデータを含むグリッドまたはテーブルを使用して、アプリケーションがその時点でユーザーのブラウザーの視点サイズに応じてのみ読み込む場所を表示することが挙げられます。さらにコンテンツやデータを表示するために下にスクロールすると、その時点でさらに多くのデータがビューに読み込まれます。
これは、ajax や jQuery を介した一般的なビジュアル/インタラクション デザイン パターンになりつつあります。
そして、上で述べたように、その逆はクライアントを考慮しない Eager Loading であり、パフォーマンスに影響を与える可能性があります。
geeksforgeeks によると、遅延読み込みは、使用方法の簡素化を維持し、パフォーマンスを向上させるために、オブジェクトの初期化が実際に必要な場合にのみ行われ、それ以前には行われないソフトウェア設計パターンです。