Co to jest chętne ładowanie?

161

Co to jest chętne ładowanie? Koduję w PHP / JS, ale bardziej uogólniona odpowiedź będzie dobra.

Widziałem wiele pytań dotyczących Java i Ruby, ale nie znam żadnego z tych języków i trudno mi jest czytać kod. Nie wiem, co mam zrobić w pierwszej kolejności

Quamis
źródło
Świetne pytanie.
PA-GW

Odpowiedzi:

383

Istnieją trzy poziomy:

  1. Chętne ładowanie: robisz wszystko, gdy zostaniesz zapytany. Klasycznym przykładem jest mnożenie dwóch macierzy. Wykonujesz wszystkie obliczenia. To chętne ładowanie;
  2. Leniwe ładowanie: wykonujesz obliczenia tylko wtedy, gdy jest to wymagane. W poprzednim przykładzie nie wykonujesz żadnych obliczeń, dopóki nie uzyskasz dostępu do elementu macierzy wyników; i
  3. Nadmierne ładowanie: tutaj próbujesz przewidzieć, o co poprosi użytkownik, i załadować to wstępnie.

Mam nadzieję, że ma to sens w kontekście, w jakim to widzisz.

Podam przykład „Webby”.

Wyobraź sobie stronę z obrazami najazdów, takimi jak elementy menu lub nawigacja. Istnieją trzy sposoby, w jakie ładowanie obrazu może działać na tej stronie:

  1. Załaduj każdy wymagany obraz przed renderowaniem strony ( chętny );
  2. Załaduj tylko wyświetlane obrazy podczas ładowania strony i załaduj pozostałe, jeśli są wymagane ( leniwe ); i
  3. Załaduj tylko wyświetlane obrazy podczas ładowania strony. Po załadowaniu strony załaduj wstępnie inne obrazy w tle na wypadek, gdybyś ich potrzebował ( zbyt chętny ).

Ma sens?

cletus
źródło
3
Chociaż przesadziłeś, wykraczając poza konkretne pytanie; to wciąż doskonała odpowiedź. Jest krótki, prosty i podaje przykład.
Phil
23

Jest to przeciwieństwo leniwego ładowania , które odracza inicjalizację obiektu, dopóki obiekt nie będzie potrzebny. Zachłanne ładowanie inicjuje obiekt podczas tworzenia.

Bill the Lizard
źródło
1
Mógłbym dodać, że te terminy są ogólnie używane (i mogą pochodzić z?) W kontekście ORM (Object Relational Mapper), gdzie mapujesz obiekt do tabeli w relacyjnej bazie danych.
Loki
10

Jeśli wyobrażasz sobie, że masz obiekt nazywany osobą, która ma imię, datę urodzenia i liczbę mniej istotnych szczegółów, powiedzmy ulubiony kolor, ulubiony program telewizyjny.

Aby leniwie ładować tę klasę, zainicjowałbyś ją wczytując być może z bazy danych wszystkie podstawowe, częściej używane szczegóły (powiedzmy imię i datę urodzenia) i czytając tylko rzadziej używane szczegóły, gdy / jeśli są potrzebne, chętne ładowanie jest odwrotne tzn. wczytujesz wszystkie szczegóły w tym samym czasie.

Korzyści z leniwego ładowania są często cytowane jako efektywność, jednak jeśli obiekty nie są tak złożone lub wydajność nie jest problemem, można użyć szybkiego ładowania

Dave D.
źródło
7
Kiedy się nad tym zastanowić, leniwe ładowanie oznacza mniej pamięci i więcej obliczeń przy każdym wywołaniu funkcji, podczas gdy przyspieszone ładowanie wymagałoby więcej pamięci i większej liczby obliczeń, gdy klasa jest tworzona, a mniej obliczeń, gdy funkcja jest wywoływana.
Loki
0

Zachłanne ładowanie jest także używany w ruchu obrotowym 8. To po prostu oznacza, że niniejszy wniosek jest ładowany wewnątrz przeglądarki automatycznie, natychmiast dostać cały kod wewnątrz danego modułu, na przykład, że po prostu stworzył moduł Auth z logowaniem i zarejestruj składnik, który jest importowany do modułu aplikacji .

W przeciwieństwie do tego, istnieje leniwe ładowanie , czyli kiedy mówimy modułowi aplikacji, który ma załadowany moduł autoryzacji , aby załadował moduł autoryzacji tylko w określonym momencie, na przykład gdy użytkownik udaje się na określoną trasę.

Daniel
źródło