Eager Loadingとは何ですか?


161

Eager Loadingとは何ですか?私はPHP / JSでコーディングしていますが、より一般的な答えで十分です。

JavaとRubyに関して多くの質問を見ましたが、これらの言語のどれも知らないし、コードを読むのが難しいと思います。そもそもどうしたらいいのかわからない


すばらしい質問です。
PA-GW

回答:


383

3つのレベルがあります。

  1. 熱心な読み込み:要求されたときにすべてを行います。古典的な例は、2つの行列を乗算する場合です。すべての計算を行います。それは熱心なロードです。
  2. 遅延読み込み:必要な場合にのみ計算を行います。前の例では、結果マトリックスの要素にアクセスするまで、計算を行いません。そして
  3. 熱心な読み込み:これは、ユーザーが何を要求してプリロードするかを試して予測する場所です。

あなたがそれを目にしている文脈でそれが理にかなっていることを願っています。

「Webby」の例を挙げましょう。

メニュー項目やナビゲーションなどのロールオーバー画像のあるページを想像してみてください。このページで画像の読み込みが機能する方法は3つあります。

  1. ページをレンダリングする前に必要なすべての画像をロードします(熱心な)。
  2. ページの読み込み時に表示された画像のみを読み込み、必要な場合は他の画像を読み込みます(遅延)。そして
  3. ページの読み込み時に表示されている画像のみを読み込みます。ページが読み込まれた後、必要に応じて他の画像をバックグラウンドプリロードしますover-eager)。

理にかなっていますか?


3
あなたは特定の質問を超えて行き過ぎましたが、これはまだ素晴らしい答えです。これは短く、シンプルで、例を示しています。
Phil

23

これは、オブジェクトが必要になるまでオブジェクトの初期化を延期する遅延読み込みの逆です。熱心な読み込みは、作成時にオブジェクトを初期化します。


1
これらの用語は、ORM(オブジェクトリレーショナルマッパー)のコンテキストで一般的に使用されている(そして由来しているのではないか)と追加できます。ORMでは、オブジェクトをリレーショナルデータベースのテーブルにマップします。
ロキ

10

名前、生年月日、重要度の低い詳細を持つ人物というオブジェクトがあると想像したら、好きな色、好きなテレビ番組を言ってみましょう。

このクラスを遅延ロードするには、おそらくデータベースからすべてのコアのより頻繁に使用される詳細(たとえば、名前と生年月日)を読み取って初期化し、あまり使用されていない詳細のみを読み取ります(必要な場合のみ)。つまり、同時にすべての詳細をロードします。

レイジーローディングの利点は、多くの場合、効率として開始されますが、オブジェクトがそれほど複雑でないか、効率が問題でない場合は、熱心なローディングを使用できます


7
考えてみると、遅延読み込みは、各関数呼び出しでのメモリと計算が少ないことを意味します。一方、積極的な読み込みは、クラスの作成時に使用するメモリと計算が多くなり、関数が呼び出されるときの計算が少なくなります。
ロキ

0

積極的な読み込みはAngular 8でも使用されます。つまり、アプリケーションがブラウザー内に読み込まれた瞬間に、自動的に特定のモジュール内のすべてのコードが即座に取得されます。たとえば、サインインサインアップで認証モジュールを作成したとしましょう。App Moduleにインポートされるコンポーネントを追加します。

対照的に、レイジーローディングがあります。これは、Auth ModuleがロードされているApp Moduleに、ユーザーが特定のルートにアクセスしたときなど、特定の時点でのみAuth Moduleをロードするように指示する場合です。

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