Sono confuso sul caricamento impaziente e sul caricamento lento, c'è qualche differenza nelle prestazioni delle query sui binari?carico caricatosi e carico lento nei binari
Esiste un modo per implementare entrambi i modi?
Sono confuso sul caricamento impaziente e sul caricamento lento, c'è qualche differenza nelle prestazioni delle query sui binari?carico caricatosi e carico lento nei binari
Esiste un modo per implementare entrambi i modi?
Un modo per migliorare le prestazioni è quello di ridurre il numero di query SQL. Puoi farlo attraverso il caricamento avido.
User.find(:all, :include => :friends)
Qui si sparano solo due domande:
1) Uno per tutti gli utenti.
2) Uno per tutti gli amici degli utenti.
quando si ha un oggetto associato con molti oggetti come un utente ha molti amici e si desidera visualizzare un elenco come in Orkut si spara come molte domande come ci sono gli amici, più uno per l'oggetto si.
users = User.find(:all)
Poi query per ogni amico utente, come:
users.each do |user|
friend = Friend.find_by_user_id(user.id)
end
Qui
1) Una domanda per tutti gli utenti.
2) N query per N no. di amici amici.
dare uno sguardo su: Rails 3: Lazy loading versus eager loading
speranza che vi aiuterà a capire questo.
eager loading
carica il pistole (come a Vicksburg) e aspettare fino a quando hai veramente bisogno di usarlo. Questa è una politica di caricamento avido.
Pro: è tutto pronto per partire.
Con: si sta consumando spazio/memoria.
caricamento pigro
Un giovane cadetto di marina chiese Lord Nelson perché non stava preparando le sue navi:
"Non voglio caricare le mie pistole presto ....... io' Caricherò solo 1 microsecondo prima che sia necessario spararlo. " Egli ha detto. Questa è una politica di caricamento lenta.
Pro di caricamento lazy: non si colpisce il database finché non è necessario.
Contro: Avrai colpito il database N + 1 volte ..... a meno che tu non selezioni esattamente la colonna che desideri e tu la alias. per esempio.
@products = Product.order("categories.name").joins(:category)
Colpire il database solo una volta con una politica di lazy loading:
La query sopra colpisce il database di N + 1 volte quando si chiama product.category.name nel modello di vista - dove il prodotto viene un singolo oggetto all'interno della relazione @products. Ma se l'alias, si può fare tutto con una sola query:
@products = Product.order("categories.name").joins(:category).select("products.*, categories.name as category_name")
e usarlo in questo modo: product.category_name
controllare anche questo: http://www.spritle.com/ blog/2011/03/17/eager-loading-and-lazy-loading-in-rails-activerecord/ – Vik
Vik bella e pulita spiegazione .. –
Il caricamento lento non è la stessa cosa di non usare il caricamento ansioso. '' Il caricamento lento è un modello di progettazione comunemente utilizzato nella programmazione di computer per posticipare l'inizializzazione di un oggetto fino al punto in cui è necessario.Esso può contribuire all'efficienza nel funzionamento del programma se opportunamente e adeguatamente utilizzato. " -Wikipedia' Fondamentalmente se la tua pagina ha un gruppo di immagini che un utente non vede fino a quando non scorre, puoi aspettare che scenda verso il basso e vedrà l'immagine per caricarlo. Questo è il caricamento pigro. –