A metà luglio 2008 Memoization è stato aggiunto al core di Rails. Una dimostrazione dell'uso è here.Quando utilizzare la memoizzazione in Ruby on Rails
Non sono stato in grado di trovare alcun buon esempio su quando i metodi dovrebbero essere memoizzati e le implicazioni sulle prestazioni di ciascuno. This blog post, ad esempio, suggerisce che spesso la memoizzazione non dovrebbe essere utilizzata affatto.
Per qualcosa che potrebbe potenzialmente avere enormi implicazioni sulle prestazioni, sembrano esserci poche risorse che vanno al di là di fornire un semplice tutorial.
Qualcuno ha visto la memoizzazione utilizzata nei propri progetti? Quali fattori ti farebbero considerare la memorizzazione di un metodo?
Dopo aver fatto qualche ricerca per conto mio ho trovato che Memoizzazione viene usato un notevole numero di volte all'interno del nucleo Rails.
Ecco un esempio: http://github.com/rails/rails/blob/1182658e767d2db4a46faed35f0b1075c5dd9a88/actionpack/lib/action_view/template.rb.
Questo utilizzo sembra andare contro i risultati del post di blog di cui sopra che la memoizzazione può danneggiare le prestazioni.
Quando si dice "vale a dire che è garantito restituire esattamente lo stesso valore per gli stessi argomenti", come si applicherebbe alle query di Rails ActiveRecord? Supponiamo ad esempio di aver memorizzato un metodo che recupera tutte le città contrassegnate come attive all'interno di un modello di City, ad esempio: '' 'def self.active @active_cities = || dove ("cities.active = (?)", vero) fine '' 'Quando nuove città vengono aggiunte occasionalmente al database dagli amministratori quando l'app è attiva, è necessario riavviare il server per sovrascrivere questa variabile di istanza memoized ? O una variabile di istanza memoized viene distrutta e ricreata dopo ogni richiesta? – Kelseydh
In risposta a quanto sopra: Mi rendo conto ora che * la memoizzazione persiste solo per variabili di istanza durante il ciclo di vita di ** una singola richiesta. *** Questo è ciò che mi ha confuso. Per i principianti ti consiglio di aggiungere questo punto critico alla tua definizione. – Kelseydh