Was ist eifriges Laden?

161

Was ist eifriges Laden? Ich codiere in PHP / JS, aber eine allgemeinere Antwort ist in Ordnung.

Ich habe viele Fragen zu Java und Ruby gesehen, kenne aber keine dieser Sprachen und finde es schwierig, Code zu lesen. Ich weiß überhaupt nicht, was ich tun soll

Quamis
quelle
Gute Frage.
PA-GW

Antworten:

383

Es gibt drei Ebenen:

  1. Eifriges Laden: Sie tun alles, wenn Sie dazu aufgefordert werden. Ein klassisches Beispiel ist das Multiplizieren von zwei Matrizen. Sie führen alle Berechnungen durch. Das ist eifriges Laden;
  2. Lazy Loading: Sie berechnen nur bei Bedarf. Im vorherigen Beispiel führen Sie keine Berechnungen durch, bis Sie auf ein Element der Ergebnismatrix zugreifen. und
  3. Übermäßiges Laden: Hier versuchen Sie, vorauszusehen, was der Benutzer verlangt, und laden es vor.

Ich hoffe, das macht Sinn in dem Kontext, in dem Sie es sehen.

Lassen Sie mich Ihnen ein "Webby" -Beispiel geben.

Stellen Sie sich eine Seite mit Rollover-Bildern vor, z. B. für Menüelemente oder die Navigation. Es gibt drei Möglichkeiten, wie das Laden von Bildern auf dieser Seite funktionieren kann:

  1. Laden Sie jedes einzelne Bild, das Sie benötigen, bevor Sie die Seite rendern ( eifrig ).
  2. Laden Sie nur die angezeigten Bilder beim Laden der Seite und laden Sie die anderen, wenn / wenn sie benötigt werden ( faul ); und
  3. Laden Sie nur die angezeigten Bilder beim Laden der Seite. Nachdem die Seite geladen wurde, laden Sie die anderen Bilder im Hintergrund vor, falls Sie sie benötigen ( übermäßig eifrig ).

Sinn ergeben?

Cletus
quelle
3
Obwohl Sie über Bord gegangen sind, indem Sie über die spezifische Frage hinausgegangen sind; Dies ist immer noch eine ausgezeichnete Antwort. Es ist kurz, einfach und gibt ein Beispiel.
Phil
23

Es ist das Gegenteil von verzögertem Laden , das die Initialisierung eines Objekts verzögert , bis das Objekt benötigt wird. Eifriges Laden initialisiert ein Objekt bei der Erstellung.

Bill die Eidechse
quelle
1
Ich könnte hinzufügen, dass diese Begriffe im Allgemeinen im Kontext eines ORM (Object Relational Mapper) verwendet werden (und möglicherweise von dort stammen?), Bei dem Sie ein Objekt einer Tabelle in einer relationalen Datenbank zuordnen.
Loki
10

Wenn Sie sich vorstellen, dass Sie ein Objekt namens Person haben, das einen Namen, ein Geburtsdatum und eine Anzahl weniger kritischer Details hat, sagen wir Lieblingsfarbe, Lieblingsfernsehprogramm.

Um diese Klasse faul zu laden, würden Sie sie initialisieren, indem Sie möglicherweise aus einer Datenbank alle häufiger verwendeten Kerndetails (z. B. Name und Geburtsdatum) einlesen und die weniger verwendeten Details nur dann einlesen, wenn sie benötigt werden. Eifriges Laden ist das Gegenteil Das heißt, Sie laden alle Details gleichzeitig ein.

Die Vorteile des verzögerten Ladens werden oft als Effizienz bezeichnet. Wenn Objekte jedoch nicht so komplex sind oder die Effizienz kein Problem darstellt, kann eifriges Laden verwendet werden

Dave D.
quelle
7
Wenn Sie darüber nachdenken, geht es beim verzögerten Laden mehr um weniger Speicher und mehr Berechnungen bei jedem Funktionsaufruf, während beim eifrigen Laden mehr Speicher und mehr Berechnungen beim Erstellen der Klasse und weniger Berechnungen beim Aufrufen der Funktion benötigt werden.
Loki
0

Eager Belastung wird auch in Angular 8. Es bedeutet nur , daß das verwendete Instant der Anwendung im Browser geladen wird automatisch wir, sofort alle den Code innerhalb eines bestimmten Moduls erhalten, zum Beispiel, sagen Sie nur ein erstellte Auth - Modul mit einem Signin und Anmelden Komponente dazu, die in ein App-Modul importiert wird .

Im Gegensatz dazu erfolgt das verzögerte Laden , wenn wir dem App-Modul, in das das Auth-Modul geladen ist, mitteilen , dass das Auth-Modul nur zu einem bestimmten Zeitpunkt geladen werden soll, z. B. wenn ein Benutzer zu einer bestimmten Route wechselt.

Daniel
quelle