Ich habe festgestellt, dass einige Browser (insbesondere Firefox und Opera) sehr eifrig zwischengespeicherte Kopien von CSS- und JS- Dateien verwenden, selbst zwischen Browsersitzungen. Dies führt zu einem Problem, wenn Sie eine dieser Dateien aktualisieren, der Browser des Benutzers die zwischengespeicherte Kopie jedoch weiterhin verwendet.
Die Frage ist: Was ist die eleganteste Methode, um den Browser des Benutzers zu zwingen, die Datei neu zu laden, wenn sie geändert wurde?
Im Idealfall würde die Lösung den Browser nicht zwingen, die Datei bei jedem Besuch der Seite neu zu laden. Ich werde meine eigene Lösung als Antwort veröffentlichen, aber ich bin gespannt, ob jemand eine bessere Lösung hat, und ich werde Ihre Stimmen entscheiden lassen.
Update:
Nachdem ich hier eine Weile die Diskussion zugelassen habe, habe ich den Vorschlag von John Millikin und da5id als nützlich empfunden . Es stellt sich heraus, dass es dafür einen Begriff gibt: Auto-Versionierung .
Ich habe unten eine neue Antwort veröffentlicht, die eine Kombination aus meiner ursprünglichen Lösung und Johns Vorschlag darstellt.
Eine andere Idee, die von SCdF vorgeschlagen wurde, wäre das Anhängen einer gefälschten Abfragezeichenfolge an die Datei. (Einige Python-Codes zur automatischen Verwendung des Zeitstempels als gefälschte Abfragezeichenfolge wurden von pi gesendet .) Es gibt jedoch einige Diskussionen darüber, ob der Browser eine Datei mit einer Abfragezeichenfolge zwischenspeichern würde oder nicht. (Denken Sie daran, dass der Browser die Datei zwischenspeichern und bei zukünftigen Besuchen verwenden soll. Wir möchten, dass die Datei erst dann wieder abgerufen wird, wenn sie geändert wurde.)
Da nicht klar ist, was mit einer gefälschten Abfragezeichenfolge passiert, akzeptiere ich diese Antwort nicht.
ExpiresActive On ExpiresDefault "modification"
.iframe.contentWindow.location.reload(true)
. Siehe Methode (4) von stackoverflow.com/a/22429796/999120 - das sind Bilder, aber das Gleiche gilt.Antworten:
Update: Umgeschrieben, um Vorschläge von John Millikin und da5id aufzunehmen . Diese Lösung ist in PHP geschrieben, sollte aber leicht an andere Sprachen angepasst werden können.
Update 2: Einbeziehen von Kommentaren von Nick Johnson, dass der ursprüngliche
.htaccess
reguläre Ausdruck Probleme mit Dateien wie verursachen kannjson-1.3.js
. Die Lösung besteht darin, nur dann neu zu schreiben, wenn am Ende genau 10 Ziffern vorhanden sind. (Da 10 Ziffern alle Zeitstempel vom 09.09.2001 bis 20.11.2286 abdecken.)Zunächst verwenden wir in .htaccess die folgende Umschreiberegel:
Jetzt schreiben wir die folgende PHP-Funktion:
Ändern Sie jetzt, wo immer Sie Ihr CSS einfügen, Folgendes:
Dazu:
Auf diese Weise müssen Sie das Link-Tag nie wieder ändern, und der Benutzer sieht immer das neueste CSS. Der Browser kann die CSS-Datei zwischenspeichern. Wenn Sie jedoch Änderungen an Ihrem CSS vornehmen, wird dies vom Browser als neue URL angezeigt, sodass die zwischengespeicherte Kopie nicht verwendet wird.
Dies kann auch mit Bildern, Favoriten und JavaScript funktionieren. Grundsätzlich alles, was nicht dynamisch generiert wird.
quelle
file_exists
Überprüfung wirklich notwendig?filemtime
wird bei einem Fehler false zurückgeben. Warum also nicht einfach den Wert für die Dateizeit einer Variablen zuweisen und prüfen, ob er falsch ist, bevor die Datei umbenannt wird? Das würde eine unnötige Dateioperation reduzieren, die sich wirklich summieren würde.Einfache clientseitige Technik
Im Allgemeinen ist das Caching gut. Es gibt also einige Techniken, je nachdem, ob Sie das Problem bei der Entwicklung einer Website selbst beheben oder ob Sie versuchen, den Cache in einer Produktionsumgebung zu steuern.
Allgemeine Besucher Ihrer Website haben nicht die gleiche Erfahrung wie bei der Entwicklung der Website. Da der durchschnittliche Besucher weniger häufig auf die Website kommt (möglicherweise nur einige Male im Monat, es sei denn, Sie sind ein Google- oder ein hi5-Netzwerk), ist es weniger wahrscheinlich, dass sich Ihre Dateien im Cache befinden, und das kann ausreichen. Wenn Sie eine neue Version in den Browser erzwingen möchten, können Sie der Anforderung jederzeit eine Abfragezeichenfolge hinzufügen und die Versionsnummer erhöhen, wenn Sie größere Änderungen vornehmen:
Dadurch wird sichergestellt, dass jeder die neue Datei erhält. Dies funktioniert, weil der Browser anhand der URL der Datei ermittelt, ob sich eine Kopie im Cache befindet. Wenn Ihr Server nicht für die Abfragezeichenfolge eingerichtet ist, wird diese ignoriert, der Name sieht für den Browser jedoch wie eine neue Datei aus.
Wenn Sie jedoch eine Website entwickeln, möchten Sie die Versionsnummer nicht jedes Mal ändern, wenn Sie eine Änderung an Ihrer Entwicklungsversion speichern. Das wäre langweilig.
Während Sie Ihre Site entwickeln, besteht ein guter Trick darin, automatisch einen Abfragezeichenfolgenparameter zu generieren:
Das Hinzufügen einer Abfragezeichenfolge zur Anforderung ist eine gute Möglichkeit, eine Ressource zu versionieren. Für eine einfache Website ist dies jedoch möglicherweise nicht erforderlich. Und denken Sie daran, Caching ist eine gute Sache.
Es ist auch erwähnenswert, dass der Browser nicht unbedingt geizig ist, wenn es darum geht, Dateien im Cache zu halten. Browser haben Richtlinien für diese Art von Dingen und spielen normalerweise nach den Regeln, die in der HTTP-Spezifikation festgelegt sind. Wenn ein Browser eine Anfrage an einen Server stellt, ist ein Teil der Antwort ein EXPIRES-Header. Ein Datum, das dem Browser mitteilt, wie lange er im Cache aufbewahrt werden soll. Wenn der Browser das nächste Mal auf eine Anforderung für dieselbe Datei stößt, stellt er fest, dass sich eine Kopie im Cache befindet, und prüft anhand des Ablaufdatums, ob diese verwendet werden soll.
Ob Sie es glauben oder nicht, es ist tatsächlich Ihr Server, der den Browser-Cache so dauerhaft macht. Sie könnten Ihre Servereinstellungen anpassen und die EXPIRES-Header ändern, aber die kleine Technik, die ich oben geschrieben habe, ist wahrscheinlich eine viel einfachere Möglichkeit, dies zu tun. Da das Caching gut ist, möchten Sie dieses Datum normalerweise weit in die Zukunft setzen (ein "Far-Future Expires Header") und die oben beschriebene Technik verwenden, um eine Änderung zu erzwingen.
Wenn Sie an weiteren Informationen zu HTTP interessiert sind oder wissen möchten, wie diese Anfragen gestellt werden, ist ein gutes Buch "High Performance Web Sites" von Steve Souders. Es ist eine sehr gute Einführung in das Thema.
quelle
<link href='myCss.css?dev=14141'...>
Googles mod_pagespeed Plugin von für Apache führt für Sie eine automatische Versionierung durch. Es ist wirklich glatt.
Es analysiert HTML auf dem Weg aus dem Webserver (funktioniert mit PHP, Rails, Python, statischem HTML - alles) und schreibt Links zu CSS, JS und Bilddateien neu, sodass sie einen ID-Code enthalten. Es stellt die Dateien unter den geänderten URLs mit einer sehr langen Cache-Kontrolle bereit. Wenn sich die Dateien ändern, werden die URLs automatisch geändert, sodass der Browser sie erneut abrufen muss. Es funktioniert im Grunde nur ohne Änderungen an Ihrem Code. Es wird sogar Ihren Code auf dem Weg nach draußen minimieren.
quelle
Anstatt die Version manuell zu ändern, würde ich empfehlen, einen MD5-Hash der eigentlichen CSS-Datei zu verwenden.
Ihre URL wäre also so etwas wie
Sie können weiterhin die Umschreiberegel verwenden, um den Hash zu entfernen. Der Vorteil besteht jedoch darin, dass Sie Ihre Cache-Richtlinie jetzt auf "Für immer zwischenspeichern" setzen können. Wenn die URL identisch ist, bedeutet dies, dass die Datei unverändert bleibt.
Sie können dann ein einfaches Shell-Skript schreiben, das den Hash der Datei berechnet und Ihr Tag aktualisiert (Sie möchten es wahrscheinlich zur Aufnahme in eine separate Datei verschieben).
Führen Sie dieses Skript einfach jedes Mal aus, wenn sich CSS ändert, und Sie sind gut. Der Browser lädt Ihre Dateien NUR neu, wenn sie geändert werden. Wenn Sie eine Bearbeitung vornehmen und diese dann rückgängig machen, müssen Sie problemlos herausfinden, zu welcher Version Sie zurückkehren müssen, damit Ihre Besucher sie nicht erneut herunterladen können.
quelle
Ich bin mir nicht sicher, warum ihr so viel Mühe habt, diese Lösung zu implementieren.
Alles, was Sie tun müssen, um den geänderten Zeitstempel der Datei abzurufen und als Querystring an die Datei anzuhängen
In PHP würde ich es tun als:
filemtime ist eine PHP-Funktion, die den zeitlich geänderten Zeitstempel zurückgibt.
quelle
mycss.css?1234567890
.<link rel="stylesheet" href="mycss.css?<?php echo filemtime('mycss.css') ?>"/>
, nur für den Fall, dass einige der Argumente in diesem Thread zum Zwischenspeichern von?ver=
also wer weiß!Sie können einfach
?foo=1234
am Ende Ihres CSS / JS-Imports setzen und 1234 so ändern, dass es Ihnen gefällt. Schauen Sie sich die SO-HTML-Quelle als Beispiel an.Die Idee da ist, dass die? Parameter werden bei der Anforderung ohnehin verworfen / ignoriert, und Sie können diese Nummer ändern, wenn Sie eine neue Version einführen.
Hinweis: Es gibt einige Argumente dafür, wie sich dies genau auf das Caching auswirkt. Ich glaube, der allgemeine Kern davon ist, dass GET-Anfragen mit oder ohne Parameter sollten cachable sein, so sollte die obige Lösung arbeiten.
Es liegt jedoch sowohl am Webserver, zu entscheiden, ob er diesen Teil der Spezifikation einhalten möchte, als auch am Browser, den der Benutzer verwendet, da er einfach weitermachen und trotzdem nach einer neuen Version fragen kann.
quelle
Ich habe gehört, dass dies "Auto-Versionierung" genannt wird. Die gebräuchlichste Methode besteht darin, die mtime der statischen Datei irgendwo in die URL aufzunehmen und sie mithilfe von Umschreibhandlern oder URL-Confs zu entfernen:
Siehe auch:
quelle
Die rund 30 vorhandenen Antworten sind ein guter Rat für eine Website von ca. 2008. Wenn es jedoch um eine moderne Single-Page-Anwendung (SPA) geht, ist es möglicherweise an der Zeit, einige grundlegende Annahmen zu überdenken… insbesondere die Idee, dass der Webserver nur die einzige, neueste Version von a bereitstellen soll Datei.
Stellen Sie sich vor, Sie sind ein Benutzer, der Version M eines SPA in Ihren Browser geladen hat:
/some.template
/some.template
- Möchten Sie, dass er Version M oder N der Vorlage zurückgibt?Wenn das Format
/some.template
zwischen den Versionen M und N geändert wurde (oder die Datei umbenannt wurde oder was auch immer) , möchten Sie wahrscheinlich nicht, dass Version N der Vorlage an den Browser gesendet wird, in dem die alte Version M des Parsers ausgeführt wird . †Bei Web-Apps tritt dieses Problem auf, wenn zwei Bedingungen erfüllt sind:
Sobald Ihre App mehrere Versionen gleichzeitig bereitstellen muss, ist das Lösen von Caching und "Neuladen" trivial:
/v<release_tag_1>/…files…
,/v<release_tag_2>/…files…
<script>
und<link>
Tags usw., um auf diese Datei in einem der versionierten Verzeichnisse zu verweisenDieser letzte Schritt klingt schwierig, da möglicherweise ein URL-Builder für jede URL in Ihrem serverseitigen oder clientseitigen Code aufgerufen werden muss. Oder Sie können das
<base>
Tag einfach geschickt nutzen und die aktuelle Version an einer Stelle ändern.† Eine Möglichkeit, dies zu umgehen, besteht darin, den Browser aggressiv zu zwingen, alles neu zu laden, wenn eine neue Version veröffentlicht wird. Um laufende Vorgänge abschließen zu können, ist es möglicherweise immer noch am einfachsten, mindestens zwei Versionen parallel zu unterstützen: v-current und v-previous.
quelle
base
Tags! Was die Unterstützung von altem Code betrifft: Dies ist nicht immer eine Möglichkeit, noch ist es immer eine gute Idee. Neue Codeversionen unterstützen möglicherweise das Brechen von Änderungen an anderen Teilen einer App oder beinhalten Notfallkorrekturen, Schwachstellen-Patches usw. Ich habe diese Strategie noch nicht selbst implementiert, aber ich war immer der Meinung, dass die Gesamtarchitektur es ermöglichen sollte, dass Bereitstellungen eine alte Version alsobsolete
kennzeichnen und beim nächsten asynchronen Aufruf ein erneutes Laden erzwingen (oder einfach alle Sitzungen über WebSockets zwangsweise deaktivieren) ).Verwenden Sie nicht foo.css? Version = 1! Browser dürfen URLs nicht mit GET-Variablen zwischenspeichern. Laut http://www.thinkvitamin.com/features/webapps/serving-javascript-fast ignorieren Opera und Safari dies, IE und Firefox jedoch nicht! Verwenden Sie stattdessen foo.v1234.css und entfernen Sie die Versionsnummer mithilfe von Umschreiberegeln.
quelle
In Laravel (PHP) können wir dies auf klare und elegante Weise tun (unter Verwendung des Zeitstempels für Dateimodifikationen):
Und ähnlich für CSS
Beispiel für eine HTML-Ausgabe (
filemtime
Rückgabezeit als Unix-Zeitstempel )quelle
Die RewriteRule benötigt ein kleines Update für JS- oder CSS-Dateien, die am Ende eine Versionierung mit Punktnotation enthalten. ZB json-1.3.js.
Ich habe dem regulären Ausdruck eine Punktnegationsklasse [^.] Hinzugefügt, also .number. wird ignoriert.
quelle
^(.*)\.[\d]{10}\.(css|js)$ $1.$2
[^.]
. Es hat auch keinen Vorteil,\d
innerhalb einer Zeichenklasse zu schreiben - es\d+
wird dasselbe tun. Wie veröffentlicht, stimmt Ihr Muster mit einer beliebigen Anzahl von Zeichen (gierig) überein, dann mit einem wörtlichen Punkt, dann mit einem Nicht-Punkt, dann mit einer oder mehreren Ziffern, dann mit einem Punkt, danncss
oderjs
dann mit dem Ende des Dateinamens. Keine Übereinstimmung für Ihre Beispieleingabe: regex101.com/r/RPGC62/1Für ASP.NET 4.5 und höher können Sie die Skriptbündelung verwenden .
Das Bündeln bietet weitere Vorteile, einschließlich einer höheren Leistung beim erstmaligen Laden von Seiten mit Minimierung.
quelle
Hier ist eine reine JavaScript-Lösung
Oben wird nach dem letzten Besuch des Benutzers auf Ihrer Website gesucht. Wenn der letzte Besuch vor der Veröffentlichung des neuen Codes stattgefunden hat
location.reload(true)
, wird die Seitenaktualisierung vom Server erzwungen.Normalerweise habe ich dies als erstes Skript innerhalb des Skripts,
<head>
damit es ausgewertet wird, bevor andere Inhalte geladen werden. Wenn ein Neuladen erforderlich ist, fällt dies dem Benutzer kaum auf.Ich verwende lokalen Speicher, um den Zeitstempel für den letzten Besuch im Browser zu speichern, aber Sie können dem Mix Cookies hinzufügen, wenn Sie ältere Versionen von IE unterstützen möchten.
quelle
Interessanter Beitrag. Nachdem ich alle Antworten hier gelesen habe, zusammen mit der Tatsache, dass ich nie Probleme mit "falschen" Abfragezeichenfolgen hatte (was ich nicht sicher bin, warum jeder dies so ungern verwendet), schätze ich die Lösung (die die Notwendigkeit von Apache-Umschreibungsregeln beseitigt wie in der akzeptierten Antwort) besteht darin, einen kurzen HASH des CSS-Dateiinhalts (anstelle der Datei datetime) als gefälschten Querystring zu berechnen.
Dies würde Folgendes ergeben:
Natürlich erledigen die datetime-Lösungen auch die Aufgabe beim Bearbeiten einer CSS-Datei, aber ich denke, es geht um den Inhalt der CSS-Datei und nicht um die datetime-Datei. Warum sollten diese also verwechselt werden?
quelle
Für meine Entwicklung finde ich, dass Chrom eine großartige Lösung hat.
https://developer.chrome.com/devtools/docs/tips-and-tricks#hard-reload
Klicken Sie bei geöffneten Entwicklertools einfach lange auf die Schaltfläche "Aktualisieren" und lassen Sie sie los, sobald Sie den Mauszeiger über "Leeren Cache und Hard Reload" bewegen.
Dies ist mein bester Freund und ein superleichter Weg, um das zu bekommen, was Sie wollen!
quelle
Vielen Dank bei Kip für seine perfekte Lösung!
Ich habe es erweitert, um es als Zend_view_Helper zu verwenden. Da mein Client seine Seite auf einem virtuellen Host ausführt, habe ich sie auch dafür erweitert.
Hoffe, es hilft auch jemand anderem.
Prost und danke.
quelle
Haben den clientseitigen DOM-Ansatz nicht gefunden, der das Skriptknoten- (oder CSS-) Element dynamisch erstellt:
quelle
Google Chrome verfügt über die Optionen Hard Reload sowie Empty Cache und Hard Reload. Sie können auf die Schaltfläche zum erneuten Laden (im Inspektionsmodus) klicken und diese gedrückt halten, um eine auszuwählen.
quelle
ant menu
>More Tools
>Developer Tools
aliasright click
>Inspect Element
. Es gibt auch eine Einstellung, die irgendwo in Entwicklungswerkzeugen vergraben ist (ich vergesse den Speicherort), um sie bei jedem Neuladen hart neu zu laden.Sie können ein "sitzungsweites Caching" erzwingen, wenn Sie die Sitzungs-ID als fehlerhaften Parameter der js / css-Datei hinzufügen:
Wenn Sie ein versionweites Caching wünschen, können Sie Code hinzufügen, um das Dateidatum oder ähnliches zu drucken. Wenn Sie Java verwenden, können Sie ein benutzerdefiniertes Tag verwenden, um den Link auf elegante Weise zu generieren.
quelle
Angenommen, Sie haben eine Datei verfügbar unter:
Sie können entweder einen Abfrageparameter mit Versionsinformationen an den URI anhängen, z.
oder Sie können Versionsinformationen voranstellen, z.
IMHO ist die zweite Methode besser für CSS-Dateien, da sie unter Verwendung relativer URLs auf Bilder verweisen können. Wenn Sie also Folgendes angeben, gilt Folgendes
background-image
:Die URL lautet effektiv:
Dies bedeutet, dass der Server beim Aktualisieren der verwendeten Versionsnummer diese als neue Ressource behandelt und keine zwischengespeicherte Version verwendet. Wenn Sie Ihre Versionsnummer auf Subversion / CVS / etc. Basieren. Revision bedeutet, dass Änderungen an Bildern, auf die in CSS-Dateien verwiesen wird, bemerkt werden. Dies ist beim ersten Schema nicht garantiert, dh die URL
images/happy.gif
relativ zu/styles/screen.css?v=1235
ist/styles/images/happy.gif
, die keine Versionsinformationen enthält.Ich habe eine Caching-Lösung unter Verwendung dieser Technik mit Java-Servlets implementiert und Anforderungen einfach
/v/*
mit einem Servlet bearbeitet, das an die zugrunde liegende Ressource (dh/styles/screen.css
) delegiert . Im Entwicklungsmodus Set Caching von I - Header , die dem Client immer überprüfen , um die Frische der Ressource mit dem Server sagen (dies typischerweise in einem 304 führt , wenn Sie Tomcat delegierenDefaultServlet
und die.css
,.js
etc. Datei nicht geändert hat) , während im Bereitstellungsmodus Ich setze Header mit der Aufschrift "Cache für immer".quelle
<?php header( 'Location: folder1/login.phtml' ); ?>
.Sie können einfach eine Zufallszahl mit der CSS / JS-URL hinzufügen
quelle
Für ASP.NET nehme ich die nächste Lösung mit erweiterten Optionen an (Debug- / Release-Modus, Versionen):
Auf diese Weise enthaltene Js- oder CSS-Dateien:
Global.JsPostfix und Global.CssPostfix werden in Global.asax folgendermaßen berechnet:
quelle
Ich habe dies kürzlich mit Python gelöst. Hier der Code (sollte leicht in andere Sprachen zu übernehmen sein):
Dieser Code hängt im Wesentlichen den Zeitstempel der Dateien als Abfrageparameter an die URL an. Der Aufruf der folgenden Funktion
wird darin enden, dass
Der Vorteil ist natürlich, dass Sie Ihr HTML nie wieder ändern müssen. Wenn Sie die CSS-Datei berühren, wird automatisch eine Cache-Ungültigmachung ausgelöst. Funktioniert sehr gut und der Overhead ist nicht spürbar.
quelle
Wenn Sie git + PHP verwenden, können Sie das Skript jedes Mal aus dem Cache neu laden, wenn sich das git-Repo mit dem folgenden Code ändert:
quelle
Wenn Sie ein Entwickler sind, der das Caching vermeiden möchte, verfügt die Registerkarte "Chrome-Netzwerk" über die Option "Cache deaktivieren". Andernfalls können Sie ohne ein Server-Rendering-Framework zwei Skript-Tags verwenden.
quelle
Diese Frage ist super alt und erscheint als erstes, wenn jemand dieses Problem googelt. Dies ist keine Antwort auf die Frage, wie sie von op gewünscht wird, sondern eine Antwort auf Entwickler mit diesem Problem beim Entwickeln und Testen. Und ich kann keine neue Frage zu diesem Thema stellen, da sie als Duplikat markiert wird.
Wie viele andere wollte ich das Caching nur kurz entfernen.
"keep caching consistent with the file"
.. es ist viel zu viel Aufwand ..Im Allgemeinen macht es mir nichts aus, mehr zu laden - selbst das erneute Laden von Dateien, die sich bei den meisten Projekten nicht geändert haben - ist praktisch irrelevant. Während der Entwicklung einer App - wir laden meistens von der Festplatte
localhost:port
- wird diesesincrease in network traffic
Problem nicht als Deal Breaking-Problem eingestuft .Die meisten kleinen Projekte spielen nur herum - sie landen nie in der Produktion. für sie brauchst du also nichts mehr ..
Wenn Sie Chrome Dev Tools verwenden , können Sie diesen Ansatz zum Deaktivieren des Caching wie in der folgenden Abbildung befolgen:
Und wenn Sie Probleme mit dem Caching von Firefox haben :
Wenn Sie dies nur in der Entwicklung tun, benötigen Sie auch einen Mechanismus, um das Neuladen für die Produktion zu erzwingen, da Ihre Benutzer alte Cache-ungültig gemachte Module verwenden, wenn Sie Ihre App häufig aktualisieren und keinen dedizierten Cache-Synchronisierungsmechanismus wie den in den Antworten beschriebenen bereitstellen über.
Ja, diese Informationen sind bereits in früheren Antworten enthalten, aber ich musste noch eine Google-Suche durchführen, um sie zu finden.
Hoffentlich ist diese Antwort sehr klar und jetzt müssen Sie nicht mehr.
quelle
Es scheint, dass alle Antworten hier auf eine Art Versionierung des Namensschemas hindeuten, die ihre Nachteile hat.
Browser sollten sich darüber im Klaren sein, was zwischengespeichert werden soll und was nicht, indem sie die Antwort des Webservers lesen, insbesondere die http-Header. Wie lange ist diese Ressource gültig? Wurde diese Ressource aktualisiert, seit ich sie das letzte Mal abgerufen habe? und so weiter.
Wenn die Dinge "richtig" konfiguriert sind, sollte nur das Aktualisieren der Dateien Ihrer Anwendung (irgendwann) die Browser-Caches aktualisieren. Sie können Ihren Webserver beispielsweise so konfigurieren, dass der Browser angewiesen wird, niemals Dateien zwischenzuspeichern (was eine schlechte Idee ist).
Eine ausführlichere Erklärung, wie das funktioniert, finden Sie hier https://www.mnot.net/cache_docs/#WORK
quelle
Fügen Sie einfach diesen Code hinzu, in dem Sie ein hartes Neuladen durchführen möchten (zwingen Sie den Browser, zwischengespeicherte CSS / JS-Dateien neu zu laden). Führen Sie dies in der .load-Datei aus, damit es nicht wie eine Schleife aktualisiert wird
quelle
Verwenden Sie einfach serverseitigen Code, um das Datum der Datei hinzuzufügen. Auf diese Weise wird sie zwischengespeichert und erst dann neu geladen, wenn sich die Datei ändert
In ASP.NET
Dies kann vereinfacht werden zu:
Durch Hinzufügen einer Erweiterungsmethode zu Ihrem Projekt zum Erweitern von Seite:
quelle
Ich schlage vor, den folgenden Prozess zu implementieren:
Versionieren Sie Ihre CSS / JS-Dateien bei jeder Bereitstellung, z. B.: screen.1233.css (Die Nummer kann Ihre SVN-Revision sein, wenn Sie ein Versionsverwaltungssystem verwenden.)
Minimieren Sie sie, um die Ladezeiten zu optimieren
quelle