遅延読み込みとは何ですか?


91

遅延読み込みとは何ですか?

[いくつかの回答を読んで編集してください]なぜ人々はこの用語をそれほど頻繁に使用するのですか?

ASP / ADOレコードセットを使用して、グリッドビューのデータまたはADO.NETデータソースをロードするとします。

なぜ人々がレイジーローディングという用語を使用するのか、「他の」タイプは何ですか?

回答:


226

レイジーローディングと呼ばれるのは、レイジーな人のように、したくないことを先延ばしにしているからです。反対はEager Loadingで、必要になる前にすぐに何かをロードします。

人々が遅延読み込みを使用する理由に興味がある場合は、起動に非常に時間がかかるアプリケーションを検討してください。このアプリケーションは、多くの熱心な読み込みを行っています...ディスクからの読み込み、計算など、必要になるずっと前のことです。

これを遅延読み込みと比較すると、アプリケーションの起動ははるかに速くなりますが、長時間の実行負荷を必要とする何かを初めて行う必要がある場合、初めて読み込まれるときに少し休止することがあります。したがって、遅延ロードを使用すると、アプリケーションの実行中にロード時間を償却します。実際には、ユーザーが使用する予定のないものをロードすることから節約できます。


@マイク・ストーン、こんにちは、遅延ロードとイージーローディングをいつ使用するか説明できますか?私が知っているように、ファイルマネージャーを実行すると、遅延読み込み設計が利用されます。
Alston、2014年

40

遅延読み込みは、最初に必要になったときにのみオブジェクトを読み込みまたは初期化するプログラミング方法です。これにより、特にアプリケーションに多数のコンポーネントがある場合、パフォーマンスが大幅に向上する可能性があります。

いつものように、ウィキペディアにはもっと詳細があります。


14

遅延読み込みとは、オブジェクトユニットの読み込みを、必要なところまで遅らせるという概念です。オブジェクトを不必要にロードするのではなく、必要に応じて単純な言葉でオブジェクトをロードします。たとえば、「Orders」オブジェクトが集約されている「Customer」クラスがあるとします。したがって、顧客データをロードするのが好きですが、アプリケーションで必要になるまで遅延させたい注文オブジェクトです。

以下は、遅延読み込みの使用方法、遅延読み込みの実装方法、およびその利点と欠点を示すYouTubeビデオです。

http://www.youtube.com/watch?v=2SrfdAkwmFo



7

遅延読み込みという用語は通常、オブジェクトリレーショナルマッパーについて話すときに使用されます。ADO.NETを直接使用する場合、常に熱心にロードされます(つまり、常に指定したものだけがロードされます)。

nHibernateのようなORマッパーは、データにアクセスした場合にのみ、適切なデータで「入力」されるプロキシオブジェクトを返すことをサポートします。この方法では、実際に使用するデータのみをロードします。これは、データベースからロードできるオブジェクト間に多くの関係を指定する場合に便利な機能です。ORマッパーがすべての関連オブジェクトや関連オブジェクトに関連するオブジェクトなどをロードする必要はありません。その結果、データベース全体がロードされる可能性があります。

この問題は、オブジェクトモデルを注意深く設計することでも防ぐことができます。(集計を使用し、ドメイン駆動設計のように集計ルートのみを読み込むことは、遅延読み込みを使用せずにこれを回避する方法です)。

遅延読み込みにより、またはマッパーが必要なすべてのデータを一度に取得する代わりに、多数の小さなデータベースアクセスを実行する可能性があります。これもパフォーマンスの問題を引き起こす可能性があります。


5

これが私が書いた実際の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フィールドに格納されるので、次にリクエストされたときに再計算する必要はありません。


4

遅延読み込み:不要なもので時間(またはメモリ)を無駄にすることはありません。その後、必要なときに時間がかかりますが、それで問題ありません。

人生の例:フランス語の慣用句を実際に学習する代わりに、必要に応じて一度に1つずつ学習します。これはいつ意味がありますか?フランスに短期滞在するだけの場合(つまり、多くのフレーズを必要としない場合)、またはすぐに出発する必要がある場合。2年間滞在している場合や、長い時間をかけて勉強している場合は、フレーズ集全体を事前に学習する方がはるかに効率的です(積極的な読み込み)。

[ WKRPでヴィーナスによってギャング用語で教えられたアトムに触発されました。]


物事に時間がかかることは問題ありません。私は、最適な方法で実装されていない場合、遅延読み込みが実際にアプリケーションの速度を大幅に低下させる可能性があることを経験しました。
キャプテンセンシブル

1
@SeventhElementそれは大丈夫だと私は主張していません。遅延読み込みを理解するための基礎です。うまくいかない場合(たとえば、UIが遅くなるなどの理由で)は、熱心な読み込みを選択できます。
Dan Rosenstark

4

遅延読み込みは、データベースで頻繁に使用される用語であり、必要なときにのみ必要な情報の一部を読み込むという概念を指します。

つまり、複数のテーブルを結合したレコードが必要だとします。一度にすべてフェッチした場合は、メインテーブルのみをフェッチする場合よりも時間がかかります。遅延読み込みを使用すると、残りの情報は必要な場合にのみ取得されます。そのため、特定のシナリオでは実際には「効率的な読み込み」になります。

「読み込み」の他のタイプは次のとおりです。

  1. 熱心な読み込み-接続されているすべてのテーブルを一度に読み込みます。

3

はデザインパターンです。

遅延読み込み:コードで特定のオブジェクトによる操作が必要になるまで、オブジェクトは初期化されません。初期化されると、オブジェクトは再初期化されませんが、以前に初期化されたオブジェクトが使用されます。

これにより、コードがはるかに効率的になり、メモリ使用量の管理に役立ちます。

遅延読み込みの適用例:

Ghost Lazy初期化値ホルダー


3

遅延読み込みのいくつかの利点:

  1. アプリケーションの起動時間を最小限に抑えます。
  2. オンデマンドロードのため、アプリケーションのメモリ消費量が少なくなります。
  3. サーバーへの不要な要求が回避されます。

2

遅延読み込みの例は、アプリケーションがその時点でユーザーのブラウザーの視点のサイズのみを読み込む場所を表示するために、Webページに大量のデータを含むグリッドまたはテーブルです。より多くのコンテンツまたはデータを表示するために下にスクロールすると、その時点でより多くのデータがビューにロードされます。

これは、ajaxまたはjQueryを介して、より一般的なビジュアル/インタラクションデザインパターンになりつつあります。

そして、前述のように、反対はEager Loadingであり、クライアントを考慮しないため、パフォーマンスに影響を与える可能性があります。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.