Frage

Es ist üblich, Browser-Cache-Ressourcen zu wollen -. JavaScript, CSS, Bilder, usw., bis es eine neue Version verfügbar ist, und dann dafür sorgen, dass der Browser abruft und speichert die neue Version statt

Eine Lösung ist eine Versionsnummer in den Dateinamen der Ressource einbetten, sondern die Ressourcen setzt auf diese Weise in einem Verzeichnis mit einer Revisionsnummer verwaltet wird darin das gleiche tun? Ist die ganze URL in die Datei als Schlüssel in dem Browser-Cache verwendet, oder ist es nur der Dateiname selbst und einige Meta-Daten?

Wenn meine Code-Änderungen von /r20/example.js holen /r21/example.js, kann ich sicher sein, dass Revision 20 von example.js zwischengespeichert wurde, aber jetzt Revision 21 wurde statt, und es wird nun im Cache gespeichert geholt?

War es hilfreich?

Lösung

Ja, jede Änderung in ein Teil der URL (ohne Protokolle HTTP und HTTPS Änderungen) vom Browser als eine andere Ressource interpretiert wird (und all Vermittler Proxies) und führt somit in einem separate Einheit im Browser-Cache.

Update:

Der Anspruch in dieser ThinkVitamin Artikel dass Opera und Safari / Webkit Browser mit? Abfrage-Cache-URLs tun = Strings ist false .

eine Versionsnummer Parameter an eine URL hinzuzufügen, ist eine durchaus akzeptable Weise Cache-Busting zu tun.

Was den Autor des Artikels ThinkVitamin verwechselt haben kann, ist die Tatsache, dass in ihnen in der Adresse / Adressleiste in Safari und Opera führt zu unterschiedlichen Verhalten für URLs mit Query-String Enter drücken.

Allerdings ( und das ist der wichtige Teil! ) Opera und Safari verhalten sich wie IE und Firefox , wenn es darum geht, in den Caching-Embedded / verknüpften Bildern und Stylesheets und Skripte in Web-Seiten - „?“, unabhängig davon, ob sie Zeichen in ihren URLs. (Dies kann mit einem einfachen Test auf einem normalen Apache-Server überprüft werden.)

(I auf der derzeit akzeptierte Antwort kommentiert hätte, wenn ich den Ruf hatte, es zu tun: -).

Andere Tipps

Browser-Cache-Schlüssel ist eine Kombination aus der Anforderungsmethode und Ressourcen-URI. URI besteht aus Schema, Autorität, Pfad, Abfrage- und Fragmente.

Relevante Auszug aus HTTP 1.1-Spezifikation :

  

Der primäre Cache-Schlüssel besteht aus dem Anforderungsverfahren und Ziel-URI.      Doch heute, da HTTP-Caches im allgemeinen Gebrauch sind in der Regel begrenzt      Caching Antworten zu bekommen, sinken viele Caches einfach andere Methoden      und nur die URI als primärer Cache-Schlüssel verwenden.

Relevante Auszug aus URI-Spezifikation :

  

Die allgemeine URI-Syntax besteht aus einer hierarchischen Abfolge von      Komponenten bezeichnet als das Schema, Autorität, Pfad, Abfrage- und      Fragment.

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part   = "//" authority path-abempty
              / path-absolute
              / path-rootless
              / path-empty

Ich bin 99,99999% sicher, dass es die gesamte URL ist, den Cache-Ressourcen in einem Browser verwendet wird, soll so Ihr URL-Schema funktioniert gut.

Die Mindest Sie benötigen ein HTTP-Objekt zu identifizieren ist durch den vollständigen Pfad, einschließlich der Abfrage-String-Parameter. Einiger Browser-Cache kann nicht Objekte mit einer Abfragezeichenfolge aber das hat nichts mit dem Schlüssel zu dem Cache zu tun.

Es ist auch wichtig zu bedenken, dass der der Weg ist nicht mehr ausreichend. Die Vary:. Header in der HTTP-Antwort informiert den Browser (oder Proxy-Server, etc.) von etwas anderes als die URL, die verwendet werden sollen, um den Cache-Schlüssel, wie Cookies, Encoding-Werte usw. zu bestimmen

Um die grundlegende Frage, ja, ist die URL der JS-Datei zu ändern sufficent. Auf der größere Frage, was bestimmt den Cache-Schlüssel, dann ist es die URL sowie die Vary. Kopf Einschränkungen

Ja. Ein anderer Weg ist das gleiche aus der Cache-Speicher Perspektive.

Natürlich hat es den ganzen Weg verwenden ‚/r20/example.js‘ vs ‚/r21/example.js‘ verschiedene Bilder vollständig sein könnte zu beginnen. Was Sie vorschlagen, ist ein gangbarer Weg zur Versionskontrolle zu behandeln.

In den meisten Browsern wird die vollständige URL verwendet. In einigen Browsern, wenn Sie eine Abfrage in der URL haben, wird das Dokument nicht im Cache gespeichert werden.

gesamte URL. Ich habe ein seltsames Verhalten in einigen älteren Browsern gesehen, in denen Groß- und Kleinschreibung ins Spiel kam.

Zusätzlich zu den bestehenden Antworten, die ich möchte nur hinzufügen, dass es möglicherweise nicht relevant, wenn Sie ServiceWorkers verwenden oder beispiels offline-Plugin. Dann könnten Sie unterschiedliche Cache-Regeln auftreten, je nachdem, wie die ServiceWorkers eingerichtet werden.

abhängt. es soll die vollständige URL sein, aber einige Browser (Opera, Safari 2 ) eine andere Cache-Strategie für URLs mit unterschiedlichen params gelten.

beste Wette ist, den Namen der Datei zu ändern .

Es gibt eine sehr clevere Lösung hier (verwendet PHP, Apache)

http://verens.com/archives/ 2008/04/09 / Javascript-Cache-Problem gelöst /

Strategie Hinweise: „Nach den Buchstaben der HTTP-Caching-Spezifikation, sollte Benutzer cachen nie URLs mit Query-Strings. Während Internet Explorer und Firefox diese ignorieren, Opera und Safari nicht -. An alle User Agents sicherstellen, dass Ihre Ressourcen cachen können, müssen wir Query-Strings aus ihren URLs halten“

http://www.thinkvitamin.com/features/webapps/serving -javascript schnelle

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top