Wir möchten die Pleite bei Produktionsbereitstellungen zwischenspeichern, aber nicht viel Zeit damit verschwenden, ein System dafür zu finden. Mein Gedanke war, einen Parameter auf das Ende von CSS- und JS-Dateien mit der aktuellen Versionsnummer anzuwenden:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
Zwei Fragen: Wird dies den Cache effektiv brechen? Verursacht der Parameter, dass der Browser die Antwort von dieser URL niemals zwischenspeichert, da der Parameter angibt, dass es sich um dynamischen Inhalt handelt?
quelle
<link rel="stylesheet" href="style.css?v=1487935578" />
Ja. Sogar Stack Overflow verwendet diese Methode, obwohl ich mich daran erinnere, dass sie (mit ihren Millionen Besuchern pro Tag und zig verschiedenen Client- und Proxy-Versionen und -Konfigurationen) einige ungewöhnliche Fälle hatten, in denen selbst dies nicht ausreichte, um den Cache zu brechen. Die allgemeine Annahme ist jedoch, dass dies funktioniert und eine geeignete Methode ist, um das Caching auf Clients zu unterbrechen.
Nein. Der Parameter ändert die Caching-Richtlinie nicht. Die vom Server gesendeten Caching-Header gelten weiterhin. Wenn keine gesendet werden, werden die Standardeinstellungen des Browsers verwendet.
quelle
/static/v22/file.css
, da Sie beispielsweise mehrere Dateien mit einem einzigen Ordner umbenennen können, z. B./static/v23/file.css
und/static/v23/mystuff.js
Es ist sicherer, die Versionsnummer in den tatsächlichen Dateinamen einzufügen. Auf diese Weise können mehrere Versionen gleichzeitig vorhanden sein, sodass Sie eine neue Version bereitstellen können. Wenn noch zwischengespeicherte HTML-Seiten vorhanden sind, die die ältere Version anfordern, erhalten sie die Version, die mit ihrem HTML funktioniert.
Beachten Sie, dass jQuery in einer der größten versionierten Bereitstellungen im Internet Versionsnummern im tatsächlichen Dateinamen verwendet und es sicher ermöglicht, dass mehrere Versionen ohne spezielle serverseitige Logik nebeneinander existieren (jede Version ist nur eine andere Datei).
Dies sprengt den Cache einmal, wenn Sie neue Seiten und neue verknüpfte Dateien bereitstellen (was Sie möchten), und von da an können diese Versionen effektiv zwischengespeichert werden (was Sie auch möchten).
quelle
Wie andere gesagt haben, wird Cache-Busting mit einem Abfrageparameter normalerweise als schlechte Idee (Bad Idea, TM) angesehen, und das schon lange. Es ist besser, die Version im Dateinamen wiederzugeben. Html5 Boilerplate empfiehlt unter anderem, die Abfragezeichenfolge nicht zu verwenden.
Von den Empfehlungen, die ich gesehen habe und die eine Quelle zitierten, scheinen alle ihre Weisheit einem Artikel von Steve Souders aus dem Jahr 2008 zu entnehmen. Seine Schlussfolgerungen basieren auf dem Verhalten der Stimmrechtsvertreter zu diesem Zeitpunkt und können heutzutage relevant sein oder auch nicht. In Ermangelung aktuellerer Informationen ist das Ändern des Dateinamens die sichere Option.
quelle
Der Cache wird einmal gelöscht, nachdem der Client die Ressource heruntergeladen hat. Jede zweite Antwort wird aus dem Client-Cache bereitgestellt, es sei denn:
quelle
Im Allgemeinen sollte dies in Ordnung sein, aber es ist möglich, dass dies nicht funktioniert, wenn ein Zwischencache (ein Proxy) vorhanden ist, der so konfiguriert ist, dass die Anforderungsparameter ignoriert werden.
Wenn Sie beispielsweise statischen Inhalt über Akamai CDN bereitstellen, kann dieser so konfiguriert werden, dass Anforderungsparameter ignoriert werden, um zu verhindern, dass der Cache mit dieser Methode beschädigt wird.
quelle
Es hängt sehr davon ab, wie robust Ihr Caching sein soll. Zum Beispiel kann der Squid - Proxy - Server (und möglicherweise anderen) standardmäßig nicht das Caching URLs mit einem Abfragezeichenfolgeflag serviert - zumindest taten es , wenn dieser Artikel geschrieben wurde. Wenn Ihnen bestimmte Anwendungsfälle, die unnötige Cache-Fehler verursachen, nichts ausmachen, fahren Sie mit den Abfrageparametern fort. Es ist jedoch sehr einfach, ein auf Dateinamen basierendes Cache-Busting-Schema einzurichten, das dieses Problem vermeidet.
quelle
Hier wurde ein Vergleich der beiden Techniken (Abfragezeichenfolge und Dateiname) gefunden :
Die Version als Querystring hat zwei Probleme.
quelle
Ein anderer ähnlicher Ansatz besteht darin, htaccess mod_rewrite zu verwenden, um einen Teil des Pfads beim Bereitstellen der Dateien zu ignorieren. Ihre nie zwischengespeicherte Indexseite verweist auf den neuesten Pfad zu den Dateien.
Aus entwicklungspolitischer Sicht ist es so einfach wie die Verwendung von Parametern für die Versionsnummer, aber es ist genauso robust wie der Dateinamenansatz.
Verwenden Sie den ignorierten Teil des Pfads für die Versionsnummer. Der Server ignoriert ihn einfach und stellt die nicht zwischengespeicherte Datei bereit.
1.2.3/css/styles.css
dient der gleichen Datei wiecss/styles.css
seit dem Entfernen des ersten Verzeichnisses, das von der htaccess-Datei ignoriert wirdEinschließlich versionierter Dateien
Beachten Sie, dass dieser Ansatz bedeutet, dass Sie das Caching Ihrer Indexseite deaktivieren müssen. Verwenden Sie <meta> -Tags, um das Caching in allen Browsern zu deaktivieren ?
.htaccess-Datei
Sie können auf jeder Serverplattform, die das Umschreiben von URLs ermöglicht, denselben Ansatz wählen
(Umschreibbedingung von mod_rewrite angepasst - Verzeichnis umschreiben, um Zeichenfolge außer / #! / abzufragen )
... und wenn Sie Cache-Busting für Ihre Indexseite / Ihren Site-Einstiegspunkt benötigen, können Sie diese jederzeit mit JavaSript aktualisieren .
quelle
quelle
quelle
Ich hoffe, dies sollte Ihnen helfen, eine externe JS-Datei einzufügen
Quelle - Cachebuster-Code in JavaScript
quelle