Eager Loading

Eager Loading kommt aus der Softwareentwicklung und bezeichnet ein Entwurfsmuster, bei dem möglichst wirksam sofort alle benötigten Daten abgerufen werden können. Eager Loading grenzt sich damit vom Lazy Load (auch „faules“ Laden genannt) ab, bei dem Datenobjekte Werte oder andere Objekte bereitstellen, die jedoch erst bei einer konkreten Anfrage zur Verfügung gestellt werden.


Allgemeine Informationen zum Thema

Beim Eager Loading können bei starker Vernetzung der Datenstrukturen zahlreiche Ladevorgänge und umfangreiche Kaskaden auftreten, weshalb in bestimmten Fällen eher das Lazy Loading verwendet wird.[1].

Eager Loading und ORM

Neben der Definition einer Abfrage ist die Leistungsfähigkeit von ORM maßgeblich für die Frage nach Lazy oder Eager Loading. Wann verbundene Objekte geladen werden, hängt im Wesentlichen von der Zielführung ab.

Ein Beispiel: Angenommen, man möchte online einen Flug buchen. Erhält man nun für den gewünschten Flug alle Daten, ist das unter Umständen nicht zielführend. Wenn man etwa dazugehörige Daten zu Personen oder andere Daten bekommt, werden diese faktisch nicht für das eigene Vorhaben benötigt. Auf der anderen Seite müssen diese Daten beim Zugriff auf eine Objektreferenz nachgeladen werden. Dieser Vorgang wird als Lazy Loading bezeichnet und ist der allgemeine Standard. Eager Loading dagegen kann man auf der Ebene von Datenbankverbindungen oder einzelnen Anfragen steuern.

Es stellt sich also die Frage, ob es sinnvoller ist, Lazy oder Eager Loading zu verwenden. Die Antwort auf die Frage hängt von der Notwendigkeit der verwendeten Daten ab. Unter Umständen benötigt man das Nachladen bestimmter Daten gar nicht, dann wäre es kontraproduktiv, diese von vornherein zu laden. Das spätere Nachladen kann aber sehr aufwändig sein, sodass das frühe Laden die bessere Lösung sein kann.

Die wesentlichen Entscheidungskriterien sind also die nach der Wahrscheinlichkeit der konkret benötigten Daten, die nach der grundsätzlichen Datenmenge, um die es geht und ein weiterer Aspekt: Ist es überhaupt möglich, später Daten nachzuladen? Dies ist nicht immer der Fall, beispielsweise dann nicht, wenn die Daten in der Zwischenzeit serialisiert wurden. In diesem Fall ist das automatische Nachladen von Daten meistens nicht mehr möglich.[2].

Vorteile und Nachteile von Eager Loading

Naturgemäß sind schnelle Ladezeiten von Websites heute sehr wichtig. Das betrifft sowohl die Bewertung durch Google als auch die Ansprüche, die Nutzer haben, wenn sie eine Website aufrufen. Auf diesen Umstand zielt Lazy Loading ab, denn da bei diesem Verfahren zunächst nur Teile der Daten geladen werden, erhöht sich die Geschwindigkeit, mit der eine Seite aufgerufen werden kann. Eager Loading benötigt hier in aller Regel mehr Zeit, da gleich zu Beginn alle Daten (also unter Umständen auch solche, die nicht benötigt werden) abgerufen werden.

Wenn zum Beispiel eine Kundendatenbank aufgerufen wird, ist es oft sinnvoller, zunächst nur die Basisdaten, also etwa die Namen der Kunden aufzurufen. Erst durch einen Klick auf diesen Namen werden dann weitere Daten geladen. Kommt hier dagegen Eager Loading zum Einsatz, werden sämtliche Daten abgerufen, also auch die der Kunden, die derzeit gar nicht bearbeitet werden sollen bzw. müssen. Hier erweist sich Eager Loading also als Nachteil.

Bei anderen Arbeitsabläufen dagegen kann Eager Loading Vorteile mit sich bringen, weil es effizienter arbeitet. Zudem kann das Arbeitstempo beschleunigt werden, wenn erst einmal alle Daten vorhanden sind. Beim Lazy Loading müssen diese dann womöglich nachträglich geladen werden, was den Arbeitsprozess ins Stocken geraten lassen kann.

Die Performance einer Website spielt zwar eine große Rolle beim Erfolg. Dennoch ist nicht zu beziffern, wann Besucher einer Website abwandern, wenn ihnen die Ladezeiten zu lang sind. Und auch wenn Amazon schon vor Jahren herausgefunden haben will, dass beim Laden einer Seite eine Verzögerung von 100 Millisekunden schon einen Umsatzausfall von einem Prozent bedeutet, spricht das nicht automatisch für Lazy Loading.

Man kann also nicht pauschal beurteilen, ob Lazy oder Eager Loading besser ist. Es kommt immer auf den Anwendungsbereich an, der für die eine oder andere Variante sprechen kann.[3].


Google und Eager Loading

Auch wenn Suchmaschinen-Bots Probleme haben können, wenn Inhalte per Lazy Loading nachgeladen werden, rät Google grundsätzlich eher zu Lazy Loading als zu Eager Loading. Als wirksame Maßnahme für die korrekte Ausführung stellt Google für Webmaster eine Lazy-Loading-Guideline zur Verfügung.

Wie bereits erwähnt, gibt es trotzdem gute Argumente für Eager Loading. Bei Online-Shops aber kommt diese Methode eher selten zum Einsatz. Der Grund liegt im Aufwand, der mit Eager Loading betrieben werden muss. Wenn ein Nutzer einen Shop besucht, auf dem sich viele Produkte befinden, wäre die Performance in Gefahr, wenn sofort alle verfügbaren Produkte aufgerufen werden, wie das bei Eager Loading der Fall wäre.

Sinnvoller ist das Nachladen von Produktbeschreibungen, wenn der Seitenbesucher nach unten scrollt.[4].


Bedeutung für das Development

Die Wahl zwischen Eager Loading und Lazy Loading ist keine Frage von Richtig oder Falsch. Sie hängt vielmehr vom Aufgabenfeld ab, das bearbeitet werden soll. Und auch wenn in vielen Fällen Lazy Loading empfehlenswerter ist, kann dies nicht als Grundregel formuliert werden.

Es gilt also, von Einzelfall zu Einzelfall zu entscheiden, ob Eager Loading angewendet wird oder nicht. Bei der Entscheidung sollte jedoch die Performance der Website nicht unberücksichtigt bleiben, da diese durch Eager Loading eingeschränkt werden kann. Die bessere Wahl ist Eager Loading also immer dann, wenn die Vorteile die offenkundigen Nachteile überwiegen.


Einzelnachweise

  1. Lazy Loading de.wikipedia.org Abgerufen am 08.01.2021
  2. Eager Loading it-visions.de Abgerufen am 08.01.2021
  3. Lazy Loading wpwissen.com Abgerufen am 08.01.2021
  4. Lazy Loading indexlift.com Abgerufen am 08.01.2021

Weblinks