Frage Was ist Lazy Loading?


Was ist Lazy Loading?

[Bearbeiten Sie nach dem Lesen ein paar Antworten] Warum benutzen Leute diesen Begriff so oft?

Angenommen, Sie verwenden nur ein ASP / ADO-Recordset und laden es mit Daten oder ADO.NET Datasource für eine Gridview.

Ich denke, ich hätte fragen sollen, warum die Leute den Begriff Lazy Loading verwenden, welche "anderen" Typen sind das?


74
2017-08-30 19:20


Ursprung


Antworten:


Es heißt Lazy Loading, weil du, wie eine faule Person, es ablegst, etwas zu tun, was du nicht willst. Das Gegenteil ist Eager Loading, wo Sie etwas laden, lange bevor Sie es brauchen.

Wenn Sie neugierig sind, warum Menschen Lazy Loading verwenden, sollten Sie eine Anwendung in Betracht ziehen, die viel zu lange dauert. Diese Anwendung wird wahrscheinlich eine Menge eifriger Ladevorgänge durchführen ... Dinge von der Festplatte laden und Berechnungen durchführen und vieles mehr, lange bevor es überhaupt benötigt wird.

Vergleichen Sie dies mit Lazy Loading, die Anwendung würde viel schneller starten, aber wenn Sie zum ersten Mal etwas ausführen müssen, das eine lange Laufzeit benötigt, kann es eine kleine Pause geben, während es zum ersten Mal geladen wird. Mit dem Lazy Loading amortisieren Sie also die Ladezeit während des gesamten Laufs Ihrer Anwendung ... und Sie sparen möglicherweise Dinge, die der Benutzer möglicherweise niemals verwenden möchte.


194
2017-08-30 19:44



Lazy Loading ist eine Programmiermethode, bei der Sie ein Objekt nur laden oder initialisieren, wenn Sie es benötigen. Dies kann Ihnen möglicherweise einen großen Leistungsschub verschaffen, besonders wenn Sie viele Komponenten in Ihrer Anwendung haben.

Wie gewöhnlich, Wikipedia hat mehr Details.


37
2017-08-30 19:26



Lazy Loading ist ein Konzept, bei dem wir das Laden der Objekteinheit auf den Punkt verzögern, an dem wir sie benötigen. Einfaches Beschreiben des Bedarfsladens, anstatt die Objekte unnötig zu laden. Zum Beispiel, wenn Sie eine Klasse "Kunde" haben, bei der das Objekt "Aufträge" aggregiert ist. Sie möchten also die Kundendaten laden, aber die Auftragsobjekte, die Sie verzögern möchten, bis Ihre Anwendung sie benötigt.

Unten ist ein Youtube-Video, das zeigt, wie man Lazy Loading verwendet, wie man Lazy Loading implementieren kann und welche Vor- und Nachteile es hat.

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


13
2017-09-14 05:48



Wikipedia-Definition Lazy Loading ist ein Entwurfsmuster, das häufig bei der Computerprogrammierung verwendet wird, um die Initialisierung eines Objekts auf den Punkt zu verzögern, an dem es benötigt wird. ...

http://en.wikipedia.org/wiki/Lazy%20loading


9
2017-08-30 19:21



Der Begriff "Lazy Loading" wird normalerweise verwendet, wenn über objektrelationale Mapper gesprochen wird. Wenn Sie ADO.NET direkt verwenden, werden Sie immer eifrig geladen (dh es lädt immer genau das, was Sie angeben).

OR-Mappers wie nHibernate unterstützen die Rückgabe von Proxy-Objekten, die nur dann mit den richtigen Daten "gefüllt" werden, wenn Sie auf die Daten zugreifen. Auf diese Weise laden Sie nur die Daten, die Sie wirklich verwenden. Dies ist ein nützliches Feature, wenn Sie viele Relationen zwischen Objekten angeben, die aus der Datenbank geladen werden können. Sie möchten nicht, dass der OR-Mapper alle zugehörigen Objekte und die mit den zugehörigen Objekten verknüpften Objekte lädt. Dies kann dazu führen, dass Ihre gesamte Datenbank geladen wird.

Dieses Problem kann durch sorgfältiges Design Ihres Objektmodells verhindert werden. (Das Verwenden von Aggregaten und nur das Laden von Aggregatwurzeln wie in domänengesteuertem Design ist eine Möglichkeit, dies zu umgehen, ohne das Lazy-Laden zu verwenden).

Lazy Loading kann dazu führen, dass der oder Mapper viele kleine Datenbankzugriffe durchführt, anstatt alle Daten, die Sie einmal benötigen, zu erhalten. Dies kann auch zu Leistungsproblemen führen.


6
2017-08-30 21:36



Hier ist ein Beispiel aus echtem Python-Code, den ich geschrieben habe:

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

Grundsätzlich habe ich eine Item-Klasse, die einen Gegenstand in unserem Inventar darstellt. Die Gesamtzahl der Gegenstände, die wir haben, ist die Anzahl, die wir besitzen, plus die Summe aller Gegenstände, die wir aus verschiedenen Quellen leihen. Diese Zahlen sind alle in unserer Datenbank gespeichert, und es wäre sinnlos, dies zu berechnen, bis die Summe tatsächlich angefordert wird (da oft Artikel verwendet werden, ohne dass die Summe angefordert wird).

Die Gesamteigenschaft prüft also, ob das _total-Feld existiert. Wenn dies nicht der Fall ist, fragt der Eigenschaftscode die Datenbank ab und berechnet sie. Anschließend speichert sie den Wert im Feld _total, damit er bei der nächsten Anforderung nicht erneut berechnet werden muss.


5
2017-08-30 19:35



Lazy Loading: Du verschwendest deine Zeit (oder dein Gedächtnis) nicht mit Dingen, die du vielleicht nicht brauchst. Dann, wenn Sie es brauchen, dauert es länger, aber das ist in Ordnung.

Beispiel aus dem Leben: Anstatt den französischen Sprachführer tatsächlich zu lernen, lernt man die Sätze nacheinander, so wie sie gebraucht werden. Wann macht das Sinn? Wenn Sie nur für kurze Zeit in Frankreich sind (d. H. Sie werden nicht viele Phrasen brauchen) oder wenn Sie sehr bald gehen müssen. Wenn du zwei Jahre dort bist und / oder viel Zeit zum Lernen hast, dann ist es vielleicht viel effizienter, den ganzen Sprachführer im Voraus zu lernen (eifriges Laden).

[Inspiriert von der Atom, wie von Venus in Bandenbegriffen auf WKRP gelehrt.]


4
2017-07-22 01:15



Lazy Loading ist ein häufig in Datenbanken verwendeter Begriff, der sich auf das Konzept bezieht, Teile der benötigten Informationen nur dann zu laden, wenn sie benötigt werden.

I.e. Angenommen, Sie benötigen einen Datensatz, der mehrere Tabellen enthält. Wenn du alles auf einmal geholt hast, würde es länger dauern, als wenn du nur die Haupttabelle holen würdest. Bei Verwendung von Lazy-Loading wird der Rest der Information nur abgerufen, wenn es benötigt wird. So ist es in bestimmten Szenarien tatsächlich "effizientes Laden".

Die anderen Arten des "Ladens" sind:

  1. Eager Loading - Laden Sie alle verbundenen Tabellen gleichzeitig.

4
2017-08-15 02:25



ist ein Designmuster.

Lazy Loading: Bis Ihr Code eine Operation erfordert, die von einem bestimmten Objekt ausgeführt wird, wird das Objekt nicht initialisiert. Sobald es initialisiert ist, initialisiert es das Objekt nicht neu, sondern verwendet das zuvor initialisierte Objekt.

Dies macht Ihren Code viel effizienter und hilft bei der Verwaltung der Speichernutzung.

Beispielhafte Anwendungen von Lazy Loading:

Geist Lazy Initialisierung Werthalter


3
2017-07-22 00:56