Che cos'è il caricamento desideroso?


162

Che cos'è il caricamento desideroso? Codifico in PHP / JS ma una risposta più generalizzata andrà bene.

Ho visto molte domande su Java e Ruby, ma non conosco nessuna di queste lingue e trovo difficile leggere il codice. Non so che cosa dovrebbe fare in primo luogo


Ottima domanda
PA-GW,

Risposte:


384

Ci sono tre livelli:

  1. Caricamento desideroso: fai tutto quando ti viene chiesto. L'esempio classico è quando moltiplichi due matrici. Fai tutti i calcoli. È un caricamento impaziente;
  2. Caricamento lento: esegui un calcolo solo quando richiesto. Nell'esempio precedente, non si esegue alcun calcolo finché non si accede a un elemento della matrice dei risultati; e
  3. Caricamento troppo desideroso: è qui che provi e anticipi ciò che l'utente chiederà e lo precaricherà.

Spero che abbia senso nel contesto in cui lo vedi.

Lascia che ti faccia un esempio di "Webby".

Immagina una pagina con immagini di rollover come per voci di menu o navigazione. Esistono tre modi in cui il caricamento dell'immagine potrebbe funzionare su questa pagina:

  1. Carica ogni singola immagine richiesta prima di eseguire il rendering della pagina ( desideroso );
  2. Carica solo le immagini visualizzate sul caricamento della pagina e carica le altre se / quando sono necessarie ( pigro ); e
  3. Carica solo le immagini visualizzate al caricamento della pagina. Dopo che la pagina è stata caricata, precaricare le altre immagini in background nel caso in cui siano necessarie ( troppo desiderose ).

Ha senso?


3
Sebbene tu abbia esagerato andando oltre la domanda specifica; questa è ancora una risposta eccellente. È breve, semplice e fornisce un esempio.
Phil

23

È l'opposto del caricamento lento , che impedisce l'inizializzazione di un oggetto fino a quando l'oggetto non è necessario. Il caricamento desideroso inizializza un oggetto al momento della creazione.


1
Potrei aggiungere che questi termini sono generalmente usati (e forse provengono da?) Nel contesto di un ORM (Object Relational Mapper), dove si mappa un oggetto su una tabella in un database relazionale.
Loki,

10

Se immagini di avere un oggetto chiamato persona che ha un nome, una data di nascita e un numero di dettagli meno critici, diciamo colore preferito, programma TV preferito.

Per caricare questa classe in modo pigro dovresti inizializzarla leggendo forse da un database tutti i dettagli di base più frequentemente utilizzati (ad esempio nome e data di nascita) e leggendo i dettagli meno utilizzati quando / se sono necessari, il caricamento desideroso è l'opposto , ovvero carichi tutti i dettagli contemporaneamente.

I vantaggi del caricamento lento sono spesso citati come efficienza, tuttavia se gli oggetti non sono così complessi o l'efficacia non è una preoccupazione, è possibile utilizzare un caricamento desideroso


7
Se ci pensate, il caricamento lento riguarda più memoria e più calcoli ad ogni chiamata di funzione, mentre il caricamento desideroso userebbe più memoria e più calcoli quando viene creata la classe e meno calcoli quando viene chiamata la funzione.
Loki,

0

Eager loading è utilizzato anche in obliquo 8. significa solo che l'istante l'applicazione viene caricata all'interno del browser che automaticamente, immediatamente ottenere tutto il codice all'interno di un particolare modulo, per esempio, diciamo che avete appena creato un modulo Auth con un Signin e iscrizione componente che viene importato in un modulo app .

Al contrario, c'è un caricamento lento , che è quando diciamo al Modulo app in cui è caricato il Modulo Auth , di caricare il Modulo Auth solo in un determinato momento, come quando un utente passa a una determinata rotta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.