Beenden Sie das Chrome-Caching meiner JS-Dateien


136

Ich werde eine Änderung an meinen JS-Dateien vornehmen, aber es wird sich nicht wirklich im Browser ändern. Ich muss die Dateien jedes Mal umbenennen, damit sie neu geladen werden. Gibt es eine Art .htaccess-Befehl, den ich hinzufügen kann, oder etwas, das das Caching beendet?

Es speichert sogar den Hardcore meiner HTML-Seiten zwischen. Ich muss meinen gesamten Browser erneut öffnen, um Änderungen zu sehen. Könnte es möglicherweise ein Serverproblem sein?


Verursacht das Aktivieren des ETag-Headers auf Ihrem Webserver, dass Chrome zwischenspeichert, aber eine neue Kopie der Datei korrekt abruft, wenn sie geändert wurde?
Entwickler Webs

Antworten:


200

Sie können die Einstellungen auf das Symbol oben rechts ...| Weitere Tools | Entwicklertools | Netzwerk | Cache deaktivieren (während DevTools geöffnet ist)

Für Windows ist dies F12oder CTRL + SHIFT + Iwährend auf dem Mac CMD + SHIFT + IDevTools geöffnet.

Neuer Pfad für Chrome Update September 2018:

Klicken Sie oben rechts auf das Einstellungssymbol ...| Einstellungen | Einstellungen | Entwicklertools | Netzwerk | Cache deaktivieren (während DevTools geöffnet ist)


4
Großer Fehler von Chrome, Dinge zwischenzuspeichern ... selbst wenn die Seite mit "Kein Cache" markiert ist ... Na ja, zumindest funktioniert dies, die Benutzer können leiden, aber zumindest kann ich mich entwickeln
Robert Noack

4
Bitte beachten Sie, dass sich die "Einstellungen" nicht mehr unten rechts befinden! Klicken Sie oben rechts auf das Menü mit den drei Punkten , um zu den Einstellungen zu gelangen.
Yizzlez

4
Der Standort ist: obere rechte Ecke | "..." | Einstellungen | Einstellungen | Netzwerk | "Cache deaktivieren" (während DevTools geöffnet ist).
Atom88

1
Das ist SEHR SCHLECHTE PRAXIS !!! Nein, Sie sollten keinen vorübergehenden Hack für Ihre Verwendung haben. Sie sollten eine dauerhafte Lösung für ALLE Ihre Benutzer haben. Der beste Weg ist eine zufällige Abfragezeichenfolge am Ende des src. src = "someJs.js? someRandomStringCreatedByInlineJsOrServerRenderedCode", wodurch es jedes Mal eine neue Version gab. Eine gute zufällige Zeichenfolge wäre, das heutige Datum / die heutige Uhrzeit zu erfassen und dort hineinzuwerfen. Möglicherweise müssen Sie daraus eine Zeichenfolge machen, da es sich wahrscheinlich um ein Datumsobjekt handelt. Es ist wirklich sehr, sehr schlecht, dass dies die gewählte Antwort war und so stark positiv bewertet wurde.

1
Ab Chrome 61.0.3163.100 scheint die Option jetzt unter Weitere Tools / Netzwerkbedingungen verfügbar zu sein. Die Option "Entwicklertools" ist nicht mehr vorhanden.
Ilia Koulikov

61

Ein schnellerer Weg, dies zu tun, besteht darin, mit der rechten Maustaste auf das Aktualisierungssymbol neben der Adressleiste zu klicken und Leeren Cache und Hard Reload zu wählen

Stellen Sie einfach sicher, dass die Entwicklertools von Chrome geöffnet sind. (Drücken Sie F12) Übrigens ... Dieser Trick funktioniert nur unter Chrome für Windows, Ubuntu und Mac OS


2
Zu Ihrer Information, ich habe das alles versucht und absolut nichts davon hat funktioniert. Auf meinem Computer (mit den Standardeinstellungen für Mountain Lion) zeigt F12 das Dashboard an.
Aubrey Goodman

2
Wie ist es viel besser als die akzeptierte Antwort? Sie können mit der akzeptierten Antwort normal neu laden.
SSH Dies

Nein, kannst du nicht. Zumindest kann ich nicht. Keine der Antworten hat bei mir funktioniert. Es wurde immer noch eine Warnung angezeigt, die in meiner lokalen JS-Datei gelöscht wurde, sich jedoch immer noch in der zwischengespeicherten JS-Datei in Chrome befindet.
Burak Karakuş

1
Funktioniert bei mir. Stellen Sie sicher, dass die Entwickler-Tools geöffnet sind, da sonst das Menü nicht mit der rechten Maustaste angezeigt wird.
Venryx

Ich sehe die Option, aber in meinem Fall wurde das Skript nicht aktualisiert.
Ilia Koulikov

25

Halten Sie die Umschalttaste gedrückt, während Sie auf die Schaltfläche zum erneuten Laden klicken.


12

füge so etwas wie script.js?a=[random Number]mit der von PHP generierten Zufallszahl hinzu.

Haben Sie versucht, expire = 0, das Pragma "no-cache" und "cache-control = NO-CACHE"? (Ich weiß nicht, was sie über Skripte sagen).


2
Ich stolperte über diese Frage und überflog die Antworten. Dies ist eine schreckliche Idee, weil: 1) das Generieren der Zufallszahl bei jeder Anforderung dazu führt, dass Browser die Datei bei jedem Besuch erneut herunterladen . Sie möchten einen Erstellungszeitwert , damit Browser den Wert nur neu generieren, wenn Sie Änderungen an der Site vornehmen. Da PHP zur Laufzeit interpretiert wird, müssen Sie dies möglicherweise stattdessen zur Bereitstellungszeit tun. und 2) das Erzeugen einer Zufallszahl bedeutet, dass der Browser manchmal (mit zunehmender Wahrscheinlichkeit im Laufe der Zeit) eine zufällige alte zwischengespeicherte Kopie erstellt. Wenn Sie dies zur gewünschten Zeit tun müssen, verwenden Sie einen Zeitstempel!
JakeRobb

Ich mache dies und verwende die Build-Versionsnummer mit einem anständigen Timeout (1 Tag) für den Header-Cache-Wert
Worthy7

11

Ein paar Ideen:

  1. Wenn Sie Ihre Seite in Chrome aktualisieren, führen Sie STRG + F5 aus, um eine vollständige Aktualisierung durchzuführen.
  2. Selbst wenn Sie das Ablaufdatum auf 0 setzen, wird es während der Sitzung zwischengespeichert. Sie müssen Ihren Browser schließen und erneut öffnen.
  3. Stellen Sie sicher, dass beim Speichern der Dateien auf dem Server die Zeitstempel aktualisiert werden. Chrome gibt zuerst einen HEADBefehl anstelle eines vollständigen GET aus, um festzustellen, ob die vollständige Datei erneut heruntergeladen werden muss, und der Server verwendet den Zeitstempel, um anzuzeigen.

Wenn Sie das Caching auf Ihrem Server deaktivieren möchten, können Sie Folgendes tun:

Header set Expires "Thu, 19 Nov 1981 08:52:00 GM"
Header set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
Header set Pragma "no-cache"

In .htaccess


Hatte dies aber die Pre-Check = 0, Post-Check = 0 ist die Addition, die den Unterschied für mich gemacht hat.
TadLewis

7

Schnelle Schritte:

1) Öffnen Sie das Dashboard für Entwicklertools, indem Sie zum Chrome-Menü -> Extras -> Entwicklertools gehen

2) Klicken Sie auf das Einstellungssymbol auf der rechten Seite (es ist ein Zahnrad!)

3) Aktivieren Sie das Kontrollkästchen "Cache deaktivieren (wenn DevTools geöffnet ist)".

4) Wenn das Dashboard geöffnet ist, klicken Sie einfach auf Aktualisieren und JS wird nicht zwischengespeichert!


1
Es hilft jedoch nicht, mit WebStorm zu debuggen. Dann sind DevTools geöffnet. WebStrom kann keinen Debugger anhängen.
Alexander Volkov

5

Das Problem ist, dass Chrome must-revalidateim Cache-Control-Header enthalten sein muss, um Dateien erneut zu überprüfen, um festzustellen, ob sie erneut abgerufen werden müssen.

Sie können jederzeit UMSCHALT-F5 drücken und die Aktualisierung von Chrome erzwingen. Wenn Sie dieses Problem jedoch auf dem Server beheben möchten, fügen Sie den folgenden Antwortheader hinzu:

Cache-Control: must-revalidate

Dadurch wird Chrome angewiesen, beim Server zu prüfen, ob eine neuere Datei vorhanden ist. Wenn es eine neuere Datei gibt, wird sie in der Antwort empfangen. Wenn nicht, erhält es eine Antwort 304 und die Zusicherung, dass die Antwort im Cache auf dem neuesten Stand ist.

Wenn Sie diesen Header NICHT festlegen, wird Chrome ohne eine andere Einstellung, die die Datei ungültig macht, niemals beim Server nachsehen, ob es eine neuere Version gibt.

Hier ist ein Blog-Beitrag , in dem das Problem weiter diskutiert wird.


1
Ich denke es sollte Cache-Control: must-revalidatestatt sein Cache-Control: must-validate. Ich denke nicht, dass Letzteres gültig ist.
László Monda

3

Bei Aktualisierungen meiner Webanwendungen verwende ich entweder einen Handler, um eine einzelne JS-Datei zurückzugeben, um die massiven Treffer auf meinem Server zu vermeiden, oder füge ihnen eine kleine Abfragezeichenfolge hinzu:

<script type="text/javascript" src="/mine/myscript?20111205"></script>

2
Dies scheint zwar eine geniale Vorgehensweise zu sein, es können jedoch Probleme mit einigen Proxys auftreten, die nicht mehr zwischengespeichert werden, wenn sie eine Abfragezeichenfolge finden: developer.google.com/speed/docs/best-practices/…
Francois Bourgeois

2
Was sollten Sie stattdessen tun?
BlueSky

1
<Files *>
Header set Cache-Control: "no-cache, private, pre-check=0, post-check=0, max-age=0"
Header set Expires: 0
Header set Pragma: no-cache
</Files>

1

Ich weiß, dass dies eine "alte" Frage ist. Aber die Kopfschmerzen beim Caching sind es nie. Nach vielen Versuchen und Irrtümern stellte ich fest, dass einer unserer Webhosting-Anbieter über CPanel diese App namens Cachewall hatte. Ich habe gerade auf Entwicklungsmodus aktivieren geklickt und ... voilà !!! Es hat die lang erlittenen Schmerzen sofort gestoppt :) Hoffe, das hilft jemand anderem ... R.


0

Ich habe die gleiche CSS-Datei erhalten, als ich auf der Website (auf dem Hosting-Unternehmensserver mit realer Domain) stöberte, und konnte die aktualisierte Version auf Chrome nicht abrufen. Ich konnte die aktualisierte Version der Datei abrufen, als ich sie in Firefox durchsuchte. Keine dieser Antworten hat bei mir funktioniert. Ich habe auch die Website-Dateien auf meinem Computer und durchsuche die Website mit localhost mithilfe meines lokalen Apache-Servers. Ich habe meinen Apache-Server heruntergefahren und konnte die aktualisierte Datei abrufen. Irgendwie hat mein lokaler Apache-Server mit dem Chrome-Cache rumgespielt. Ich hoffe, das hilft jemandem, da es für mich sehr schwierig war, dies zu beheben.


0
  1. Öffnen Sie die Entwicklertools

    • Entweder F12
    • Oder ...-> More Tools->Developer Tools
  2. Klicken Empty Cache and Hard Reload

    • Klicken Sie entweder mit der rechten Maustaste auf das Aktualisierungssymbol (links neben der URL-Adressleiste).
    • Oder klicken Sie mit der linken Maustaste auf das Aktualisierungssymbol und halten Sie es 1 Sekunde lang gedrückt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.