2009-05-06 5 views
9

Quali sarebbero alcuni vantaggi dell'utilizzo di etags/stale?/Fresh_when? invece di caching della pagina (su una cache di file)?Rails - etags vs. page caching (file cache)

Apache gestisce automaticamente gli etags per i file statici, ma anche se non lo facesse, il caching delle pagine sarebbe ancora migliore poiché l'app Rails non viene nemmeno chiamata.

Quindi, in quali casi utilizzerei i metodi forniti da Rails (stale?/Fresh_when?)?

+0

Penso che tu intenda il caching della pagina. caches_page genererà file statici per il server web da servire direttamente. caches_action memorizzerà nella cache l'intero contenuto della pagina ma continuerà a passare attraverso il controller in modo che i filtri possano essere eseguiti, ecc. – kch

+0

Esatto, grazie per l'avviso. – Ivan

risposta

5

Sono davvero gratuiti. Etags/fresh_when ecc. Ti aiutano a giocare bene con le cache downstream (come le tue istanze Varnish/Squid o Rack :: Cache o la cache del browser oi server proxy ISP ...)

Il salvataggio nella cache delle pagine ti evita di colpire lo stack di binari interamente perché Apache/il tuo server web serve il file, quindi non vengono eseguite ricerche DB. Ma devi gestire la scadenza della cache per mantenere la cache aggiornata.

Utilizzando etags/GET condizionale, non si risparmia tempo di elaborazione molto in quanto è ancora necessario per ottenere tutti i record utilizzati nella pagina:

def show 
    @article = Article.find(params[:id]) 
    @feature = Feature.current 
    fresh_when :etag => [@article, @feature] 
end 

nel caso in cui l'utente ha una pagina corrente , ti risparmia un po 'di tempo di rendering e la larghezza di banda necessaria per mandare giù la pagina.

+0

Due correzioni: 1) Mainline Varnish non supporta ETags, ma esiste un ramo sperimentale 'experimental-ims' nel repository di origine in cui è implementato. 2) È possibile risparmiare tempo di elaborazione significativo con gli ETags memorizzando il valore ETag per una determinata pagina separatamente dai dati utilizzati per calcolarne il valore (in questo modo non è necessario rigenerarlo che può essere più costoso a causa di recuperi di database) . Vedi 'Ricettario dei servizi web RESTful', sezione 10.1. – benvolioT

0

Una cosa che viene in mente è che fresh_when ti salverà ancora qualche rendering anche se hai cancellato l'intera cache della pagina. Qui staresti usando entrambi in tandem.

Sono curioso anche di altre risposte.

2

Un altro uso che mi è venuto in mente è che si potevano ancora elaborare alcune informazioni prima di lasciare che Rails distribuisse l'intestazione "304 Not Modified". Ad esempio se vuoi registrare hit su una pagina.