2014-04-24 21 views
5

Supponiamo che la vista sia in erb/haml, ma che sia statica (non ha parti dinamiche al suo interno), Rails ricompila quella vista ogni volta che qualcuno lo colpisce, o memorizza nella cache l'html dopo che qualcuno lo ha colpito una volta?Rails ricompila l'intera vista erb/haml ogni volta che qualcuno la colpisce in produzione?

Una domanda di follow-up: se ho una vista con alcune parti dinamiche, Rails ricompila solo la parte dinamica della vista o ricompila l'intera pagina?

Io corro Rails 4.

risposta

6

Rails valuta le visualizzare i file e le parziali su ogni richiesta. Ecco perché il caching dei frammenti html è così prezioso.

Vedere Caching with Rails in Guide rotaie.

In genere si utilizza la cache di Rails per memorizzare in cache un frammento html in modo che non sia necessario eseguire nuovamente il rendering su ogni richiesta. Ecco un esempio Haml:

- cache "key-name-for-static-content" do 
    .some-html 
    some content 

Vedi DHH's How Key-Based Cache Expiration Works per i modelli basati su chiave caching utilizzando.

Per gli usi avanzati, ho scritto cache_rocket per aiutare a memorizzare nella cache il contenuto statico sul contenuto dinamico nei partial.

+0

Significa che dovrei memorizzare nella cache anche il footer statico se voglio rendere più veloce la vista? – Sbbs

+1

Sì, questo è un buon esempio di ciò che si dovrebbe memorizzare nella cache. – tee

+0

btw, questa è una gemma piuttosto bella che hai scritto; questo dovrebbe far parte dei binari. – Sbbs

1

Solo un po 'di nota terminologica: ora compile si riferisce comunemente all'atto di trasformare il modello di vista in una funzione di rubino. Rails fa questo per tutte le viste:

http://guides.rubyonrails.org/action_view_overview.html#template-caching

Queste funzioni saranno poi uscita l'uscita che si desidera.

Quindi direi che le visualizzazioni non vengono "ricompilate" ma "rivalutate".