2012-08-25 8 views
9

Wenn ich mein Web Worker-Skript bearbeite und die Seite aktualisiere, ist das Web Worker-Skript eine zwischengespeicherte Version. Ich bin ziemlich sicher, dass es nicht mein Webserver ist, weil ich sofort die neuesten Kopien aller anderen Dateien laden kann, und sogar das Neustarten des Webservers behebt das Problem nicht. Es lädt nur die neueste Version des Web Worker-Skripts, wenn ich Chrome neu starte, was höchst ineffizient ist, unnötig zu sagen! Es repariert es nicht, auch wenn ich Chrome neu starte. Kann ich irgendetwas tun, um das zu umgehen?Chrome lädt die neueste Version des Web Worker-Skripts nicht (führt eine zwischengespeicherte Version aus)

Antwort

7

Ihr Webserver legt fest, wie eine bestimmte Webressource abrufbar ist, und der Browser versucht, diese Einstellungen zu berücksichtigen. Ressourcen werden zwischengespeichert, wenn der Webserver angibt, dass er zwischengespeichert werden darf.

Wenn Sie das ändern möchten, haben Sie folgende Optionen:

  1. Löschen Sie den Browser-Cache manuell
  2. Vorübergehend Browser-Caching deaktivieren.
  3. vorübergehend die Einstellungen auf dem Webserver ändern den Browser anweisen, nicht
  4. Aufschalten die Cache für nur diese eine Web-Seite (Shift-F5 in einigen Browsern) zwischenzuspeichern einen erneuten Laden von neuen Inhalten einen
  5. hinzufügen zu zwingen Abfrageparameter an die URL des Web Worker-Skripts, die Sie jedes Mal ändern, wenn Sie eine neue Version laden möchten.
+2

Die Hardwarereservierung von Chrome aktualisiert keine Worker und verwendet weiterhin die zwischengespeicherte Version. – riv

+0

Wenn Sie mit dieser Antwort immer noch feststellen, dass Ihr Service-Mitarbeiter nicht aktualisiert wurde, überprüfen Sie, ob er Fehler enthält. Wenn der Service-Mitarbeiter JavaScript-Fehler enthält und die Installation fehlschlägt, wird die alte Version weiterhin verwendet. –

+0

@BasGoossen - Falls Sie es nicht bemerkt haben, handelt es sich bei dieser Frage um Web-Worker (Skripte, die in einem anderen Thread auf einer Webseite laufen), nicht um Service-Mitarbeiter (verschiedene Dinge). – jfriend00

3

Haben Sie einen Hard Refresh versucht? Strg-r?

+0

Strg + R ist eine regelmäßige Aktualisierung, denke ich ... Strg + Shift + R, vielleicht? – Ryan

8

Auf meinem Linux Chrome habe ich auf der rechten Maustaste (oder langes Drücken) der Taste neu laden und wählen Sie „Cache leeren und Fest Reload“ die neueste Version

+0

Was ist ein langer Klick? –

+0

Um lange zu klicken, halten Sie die Maustaste gedrückt, bis sich das Menü öffnet. @ Brian: Ich wusste nicht einmal, dass da war. Strg + F5 funktionierte aus irgendeinem Grund nicht, aber das funktionierte perfekt. –

+0

Vielen Dank @Brian, das hat es für mich gelöst! –

0

In Ihrem install Ereignis zu bekommen, bevor der Anruf an event.waitUntil add:

if (self.skipWaiting) { self.skipWaiting(); } 

Source

auch können Sie diese Entwicklung Workflow folgen:

  1. Konfigurieren Sie Ihren Server Service-Worker-Skript als nicht cachefähig zu dienen (Cache-Control: no-cache)
  2. Nachdem Sie Änderungen an Ihrem Servicemitarbeiter Skript gemacht:
    1. schließen alle bis auf einen der Registerkarten auf Ihre Web-Anwendung
    2. Hit Shift-reload zeigt den Servicemitarbeiter zu umgehen, um sicherzustellen, dass die verbleibende Registerkarte eines Servicemitarbeiter
    3. Treffer reload nicht unter der Kontrolle ist die neuere Version des zu lassen Kundendienstmitarbeiter c Kontrollieren Sie die Seite.

Source

1

hinzufügen <script src="your_worker_path"></scripts> zu Ihrer Seite Kopf Cache-Aktualisierung zu erzwingen.
Fügen Sie den Code Ihres Mitarbeiters in if(typeof window == "undefined"){...} ein, um zu vermeiden, dass er auf Seite neu lädt

0

Sie müssen alle Registerkarten schließen, die diese Seite öffnen. Öffnen Sie nur eine 1, dann Strg + Shift + R, um zu aktualisieren, dann wird der Cache gelöscht.