2009-08-19 13 views
128

Was ist eifrig laden? Ich code in PHP/JS aber eine allgemeinere Antwort wird gut.Was ist eifrig laden?

Ich sah viele Fragen zu Java & Ruby, aber ich kenne keine dieser Sprachen, und ich finde es schwer, Code zu lesen. Ich weiß nicht, was in erster Linie tun soll

Antwort

296

Es gibt drei Ebenen:

  1. Eager Laden: Sie alles tun, wenn Sie gefragt werden. Klassisches Beispiel ist, wenn Sie zwei Matrizen multiplizieren. Sie machen alle Berechnungen. Das ist eifrig geladen;
  2. Lazy loading: Sie tun nur eine Berechnung, wenn erforderlich. Im vorherigen Beispiel führen Sie keine Berechnungen durch, bis Sie auf ein Element der Ergebnismatrix zugreifen. und
  3. Over-eifrig laden: Dies ist, wo Sie versuchen und antizipieren, was der Benutzer anfordern und laden Sie es vor.

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

Lassen Sie mich Ihnen ein "Webby" Beispiel geben.

Stellen Sie sich eine Seite mit Rollover-Bildern wie für Menüeinträge oder Navigation vor. Es gibt drei Möglichkeiten, das Bild Laden auf dieser Seite funktionieren kann:

  1. lädt jedes einzelne Bild erforderlich, bevor Sie die Seite (eifrig) machen;
  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 , falls Sie sie benötigen (über-eifrig).

Sinn machen?

+0

verwendet werden können, obwohl Sie über Bord über die spezifische Frage, indem Sie ging; Das ist immer noch eine ausgezeichnete Antwort. Es ist kurz, einfach und gibt ein Beispiel. – Phil

+3

danke ..große Antwort :) – Orlando

21

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

+1

Ich könnte hinzufügen, dass diese Begriffe im Allgemeinen verwendet werden (und vielleicht von kommen?) im Kontext eines ORM (Object Relational Mapper), wo Sie ein Objekt auf eine Tabelle in einer relationalen Datenbank zuordnen. – Loki

9

Wenn Sie sich vorstellen, Sie haben Objekt namens Person, die einen Namen, ein Geburtsdatum und eine Anzahl von weniger kritischen Details hat, sagen wir Lieblingsfarbe, Lieblings-TV-Programm.

Zum Lazy-Laden dieser Klasse würden Sie es initialisieren lesen vielleicht in einer Datenbank alle Kern häufiger verwendeten Details (sagen Name und Geburtsdatum) und nur in den weniger verwendeten Details lesen, wenn sie benötigt werden, eifrig Laden ist das Gegenteil, dh Sie laden alle Details gleichzeitig ein.

Die benifits von verzögertes Laden werden oft als effiecency citied, aber wenn Objekte nicht so komplex sind oder efficency ist kein Problem eager loading

+7

Wenn Sie darüber nachdenken, bedeutet Lazy Loading mehr Speicherplatz und mehr Berechnungen bei jedem Funktionsaufruf, während das Eager-Laden mehr Speicher und mehr Berechnungen benötigt, wenn die Klasse erstellt wird und weniger Berechnungen, wenn die Funktion aufgerufen wird. – Loki