Was sind die harten und schnellen Regeln für die Cachesteuerung?

15

Confession : Seiten , die ich beibehalten haben unterschiedliche Regeln für Cache Control hauptsächlich basierend auf der Standardkonfiguration des Servers mit Empfehlungen aus dem weiterverfolgt Page Speed & Y-Langsame Firefox - Plug-In und die Netzwerkressourcen Ansicht in Google Speed Tracer . Die Cache-Kontrolle ist auf privat / öffentlich eingestellt, je nachdem, was sie zu tun haben. Die / Zuletzt geänderten Header von ETag werden nur gebastelt, wenn Y-Slow vermuten lässt, dass etwas nicht stimmt und die Vary-Accept-Codierung für das manuelle Gziping von Dateien für Amazon erforderlich ist CloudFront.

Beim Durchlesen des Materials über die verschiedenen Optionen und deren Funktionsweise scheinen widersprüchliche Informationen, Regeln für defekte Proxies und Frachtkultkonfigurationen vorzuliegen. Alle offiziellen Informationen, die von den oben genannten Analysewerkzeugen bereitgestellt werden, sind ziemlich unzugänglich, da sie sich auf jedes Thema einzeln und nicht als einheitliche Strategie beziehen (es gibt also keine Querverweise zwischen Techniken).

Zum Beispiel scheint es keinen Sinn zu machen, dass die Tools für die Geschwindigkeitsanalyse eine Site mit ETag genauso bewerten wie eine Site ohne ETag, wenn sie beim Caching helfen sollen.

Was sind die harten und schnellen Regeln für eine plattformunabhängige Cache-Steuerungsstrategie?

BEARBEITEN:

Ein Link durch Jeff Atwoods Artikel erklärt Caching in großartiger Tiefe.

Für die Aufzeichnung sind hier die harten und schnellen Regeln:

Wenn die Datei mit GZIP usw. komprimiert wurde - verwenden Sie "cache-control: private" als Proxy, um die komprimierte Version möglicherweise an einen Client zurückzugeben, der sie nicht unterstützt (der Browser-Cache enthält jedoch Dateien, die auf diese Weise markiert wurden). Denken Sie auch daran, ein "Vary: Accept-Encoding" einzufügen, um zu sagen, dass es komprimierbar ist.

Verwenden Sie Last-Modified in Verbindung mit ETag. Durch die Verwendung von Belt and Braces werden beide Validatoren bereitgestellt, während ETag auf dem Dateiinhalt und nicht nur auf der Änderungszeit basiert und beide Bereiche aller Basen abdeckt. HINWEIS: AOLs PageTest verfolgt aus irgendeinem Grund einen Carte-Blanche-Ansatz gegenüber ETags. Wenn Sie Apache auf mehreren Servern verwenden, um denselben Inhalt zu hosten, entfernen Sie den implizit deklarierten Inode aus ETags, indem Sie ihn aus der FileETag-Direktive ausschließen (dh "FileETag MTime Size"), es sei denn, Sie verwenden tatsächlich dasselbe Live-Dateisystem.

Verwenden Sie "cache-control: public", wo immer Sie können. Dies bedeutet, dass Proxy-Server (und der Browser-Cache) Ihren Inhalt zurückgeben, auch wenn der Rest der Seite HTTP-Authentifizierung usw. benötigt.

Metalshark
quelle

Antworten:

8

Entfernen Sie das ETag zunächst nicht, wie Yahoo sagt, es sei denn, Sie verwenden eine Serverfarm / einen Servercluster. Solange dieselbe Datei immer dasselbe ETag zurückgibt, wenn es nicht geändert wurde, ist es eine sehr nützliche Anweisung.

Wie bei anderen Header, Yahoos Best Practices schlägt eine weit in die Zukunft zu setzen ExpiresHeader für statische Dateien, Verwendung Cache-Controlfür dynamische Inhalte. Allerdings Cache-controlist völlig in Ordnung für statische Inhalte ( so ziemlich kein Unterschied zwischen ihnen).

Wenn Sie zwischengespeicherte statische Dateien ändern, müssen Sie den Dateinamen ändern oder am Ende einen eindeutigen Parameter hinzufügen, z example.com/styles.css?v=2. Das Ändern des tatsächlichen Dateinamens wird jedoch bevorzugt, wie in den Kommentaren unten angegeben.

Im Übrigen können Sie die YSlow-Regeln nach Ihren Wünschen bearbeiten, um die Etag-Regel zu entfernen und Ihre eigene Domain als CDN hinzuzufügen. Dieser Artikel ist auch eine gute Lektüre: Yahoo Probleme sind nicht Ihre Probleme

Verärgerte Ziege
quelle
Das ETag one hat in Apache Sinn gemacht, indem "FileETag MTime Size" anstelle der Standardeinstellung verwendet wurde, die den Inode (pro FS also nicht zuverlässig) auf Y-Slow enthält. Die Empfehlungen zu den Best Practices von Yahoo sind jedoch im Vergleich zu denen von Page Speed ​​etwas verwirrend. Zum Beispiel heißt es, Cache-Control nur für dynamische Seiten zu verwenden (wie Sie auch vorschlagen), und Google schlägt vor, Cache-Control zu verwenden: public für statisches CSS und Cache-Control: private für manuell gezippte Amazon Cloudfront-Dateien.
Metalshark
Es ist schwierig zu wissen, was man von diesen Ratschlägen für Stimmrechtsvertreter hält. Google sagt nur "Einige öffentliche Proxys haben Fehler ...", aber es sagt nicht, wie weit verbreitet dies ist. Es rät den Header zu setzen Vary: Accept-Encoding, finden Sie auf der Unterseite des code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat
Durch Hinzufügen eines Abfrageparameters wird die Zwischenspeicherung dieser Datei in einigen Browsern vollständig deaktiviert. So können Sie mit dem „ändern Sie den Dateinamen“ -Ansatz stattdessen wie gehen möchtenexample.com/style_v2.css
Evgeny
@Evgeny: Welche Browser? Ich habe das schon einmal gehört, aber ich habe noch nie einen Browser gesehen, der die Datei nicht zwischenspeichert (besonders wenn Sie die richtigen Header haben).
DisgruntledGoat
@DisgruntledGoat Eigentlich scheint es nach einigem Graben ein Relikt aus der http / 1.0-Ära zu sein, in der es Teil der Spezifikation war, dass der Benutzeragent tatsächlich keine Assets zwischenspeichern darf, die Abfragezeichenfolgen enthalten. Andererseits gibt code.google.com/speed/page-speed/docs/caching.html an , dass es die Proxys (squid <3.0) sind, die keine Assets zwischenspeichern. Daher wird davon abgeraten , Abfragezeichenfolgen für das Cache-Busting zu verwenden.
Evgeny
0

Ändern Sie die Anforderungsheader Ihrer Ressourcen, um die Zwischenspeicherung zu verwenden. Für die meisten Benutzer besteht die Möglichkeit, die Zwischenspeicherung zu deaktivieren, darin, einer Datei mit dem Namen .htaccess auf Ihrem Webhost / Server Code hinzuzufügen.

Dies bedeutet, dass Sie auf Ihrem Webhost zum Dateimanager (oder zu jedem Ort, an dem Sie Dateien hinzufügen oder hochladen) gehen.

Die .htaccess-Datei steuert viele wichtige Dinge für Ihre Site. Wenn Sie mit der .htaccess-Datei nicht vertraut sind, lesen Sie bitte meinen Artikel über die Arbeit mit .htaccess, um sich vor dem Ändern ein Bild davon zu machen.

Der folgende Code teilt den Browsern mit, was zwischengespeichert werden soll und wie lange sie sich daran "erinnern" sollen. Es sollte am Anfang Ihrer .htaccess-Datei hinzugefügt werden.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Speichern Sie die .htaccess-Datei und aktualisieren Sie dann Ihre Webseite.

Quelle:
https://varvy.com/pagespeed/leverage-browser-caching.html

Nomib Nomib
quelle
Nahezu jedes Beispiel von ExpiresByTypeAnweisungen, die ich sehe, enthält den MIME-Typ. text/x-javascriptReagiert Ihr Server wirklich mit diesem Inhaltstyp ?! (Ein Beispiel für blindes Kopieren / Einfügen von IMO.)
MrWhite