2009-05-06 5 views
9

Was wären einige Vorteile der Verwendung von Etags/alt?/Fresh_when? statt Seiten-Caching (in einem Datei-Cache)?Rails - Etags vs. Page Caching (Dateicache)

Apache verarbeitet automatisch Etags für statische Dateien, aber selbst wenn dies nicht der Fall wäre, wäre das Seiten-Caching immer noch besser, da die Rails App nicht einmal aufgerufen wird.

Also, in welchen Fällen würde ich die Methoden von Rails (veraltet?/Fresh_when?) Verwenden?

+0

Ich denke, du meinst Seitencache. caches_page erzeugt statische Dateien, die der Webserver direkt bedienen kann. caches_action wird den gesamten Seiteninhalt zwischenspeichern, aber wird immer noch den Controller durchlaufen, so dass Filter laufen können, usw. – kch

+0

Das stimmt, danke für den Kopf. – Ivan

Antwort

5

Sie sind wirklich kostenlos. Etags/fresh_when usw. helfen Ihnen dabei, mit Downstream-Caches (wie Ihren eigenen Varnish/Squid-Instanzen oder Rack :: Cache oder dem Browser-Cache oder ISP-Proxy-Servern ...) zu spielen

Page Caching rettet Sie davor, Ihren Rails-Stack komplett zu treffen, weil Apache/Ihr Webserver liefert die Datei, so dass keine DB-Abfragen durchgeführt werden. Aber Sie müssen sich mit dem Cache-Ablauf befassen, um den Cache frisch zu halten.

etags/bedingte get verwenden, sparen Sie nicht viel Zeit, Verarbeitung, da Sie noch alle Datensätze auf der Seite verwendet werden, müssen bekommen:

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

in dem Fall, dass der Benutzer eine aktuelle Seite hat Es spart Ihnen Zeit für das Rendern und die Bandbreite, die zum Senden der Seite benötigt wird.

+0

Zwei Korrekturen: 1) Mainline Varnish unterstützt keine ETags, aber es gibt einen experimentellen Zweig 'experimental-ims' im Quell-Repository, in dem es implementiert ist. 2) Sie können erhebliche Verarbeitungszeit mit ETags sparen, indem Sie den ETag-Wert für eine bestimmte Seite getrennt von den Daten zur Berechnung des Wertes speichern (auf diese Weise müssen Sie ihn nicht neu generieren, was aufgrund von Datenbankabrufen teurer sein kann) . Siehe 'RESTful Web Services Kochbuch', Abschnitt 10.1. – benvolioT

0

Eine Sache, die in den Sinn kommt ist, dass fresh_when noch einige Rendering speichern, auch wenn Sie den gesamten Seitencache gelöscht. Hier würden Sie beide im Tandem verwenden.

Ich bin neugierig auf andere Antworten.

2

Eine andere Verwendung, die mir aufgefallen ist, war, dass Sie noch einige Informationen verarbeiten konnten, bevor Sie Rails den Header "304 Not Modified" übergeben. Wie wenn Sie Treffer auf einer Seite speichern möchten.