Start · Sprachen · JavaScript · Referenz · ServiceWorkerRegistration.updateViaCache

ServiceWorkerRegistration.updateViaCache

Eigenschaft

Schreibgeschützte Eigenschaft, die angibt, ob der Browser beim Update-Check des Service Workers den HTTP-Cache nutzt: <code>"imports"</code>, <code>"all"</code> oder <code>"none"</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 68+, Firef Kategorie: webapi

Signatur

ServiceWorkerRegistration.updateViaCache

Beschreibung

Die schreibgeschützte Eigenschaft updateViaCache einer ServiceWorkerRegistration gibt an, wann der Browser den HTTP-Cache benutzt, wenn er prüft, ob es eine neue Version des Service-Worker-Skripts gibt. Das betrifft sowohl das Hauptskript als auch Dateien, die per importScripts() geladen werden.

Den Wert legt man beim Registrieren über die Option updateViaCache von navigator.serviceWorker.register() fest. Möglich sind drei Werte:

  • "imports" (Standard): Das Hauptskript wird immer am HTTP-Cache vorbei geladen. Für importierte Skripte darf der Cache genutzt werden.
  • "all": Der HTTP-Cache darf für das Hauptskript und für alle importierten Skripte genutzt werden. Das entspricht dem früheren Verhalten der Browser.
  • "none": Der HTTP-Cache wird weder für das Hauptskript noch für importierte Skripte genutzt.

Die Eigenschaft ist nützlich für die Fehlersuche und die Überwachung: Man kann damit prüfen, ob eine bestehende Registrierung die gewünschte Update-Strategie verwendet. Das ist vor allem wichtig, wenn Service-Worker-Dateien mit langen Cache-Control-Headern ausgeliefert werden. Unabhängig vom HTTP-Cache umgeht der Browser den Cache für den Update-Check nach spätestens 24 Stunden.

Rückgabewert

Typ
"imports" | "all" | "none"
Beschreibung
Ein String, der die Cache-Strategie für Update-Checks beschreibt. Ohne ausdrückliche Angabe beim Registrieren ist der Wert "imports".

Beispiele

Aktuelle Update-Strategie auslesen

if ('serviceWorker' in navigator) {
  const registration = await navigator.serviceWorker.register('/sw.js');
  console.log(`updateViaCache: ${registration.updateViaCache}`);
}
updateViaCache: imports

HTTP-Cache für Updates vollständig umgehen

const registration = await navigator.serviceWorker.register('/sw.js', {
  scope: '/',
  updateViaCache: 'none'
});

console.log(registration.updateViaCache);
none

Bestehende Registrierungen prüfen und korrigieren

const registrations = await navigator.serviceWorker.getRegistrations();

for (const reg of registrations) {
  if (reg.updateViaCache !== 'none') {
    console.warn(`Scope ${reg.scope} nutzt '${reg.updateViaCache}' – Registrierung wird erneuert`);
    // Erneutes register() mit gleicher URL und gleichem Scope aktualisiert die Option
    await navigator.serviceWorker.register('/sw.js', {
      scope: reg.scope,
      updateViaCache: 'none'
    });
  }
}
Scope https://example.com/ nutzt 'imports' – Registrierung wird erneuert

Manuellen Update-Check mit Diagnose kombinieren

const reg = await navigator.serviceWorker.ready;
console.log(`Prüfe Update (Cache-Modus: ${reg.updateViaCache}) …`);
await reg.update();
console.log(reg.installing ? 'Neue Version wird installiert' : 'Keine neue Version');
Prüfe Update (Cache-Modus: imports) … Keine neue Version

// Wichtig · Fallstricke

  • Schreibgeschützt: Wer registration.updateViaCache = 'none' zuweist, ändert nichts, und es gibt auch keinen Fehler. Um den Wert zu ändern, ruft man register() mit derselben Skript-URL und neuer Option erneut auf.
  • Ein ungültiger Wert bei register() (z. B. 'never') führt zu einem TypeError.
  • Der Standard "imports" ist meist sinnvoll. Wenn die importierten Skripte aber versionslose Dateinamen haben und lange gecacht werden, können Nutzer veralteten Code behalten. Abhilfe schaffen Dateinamen mit Version bzw. Hash oder der Wert "none".
  • "all" ist riskant, wenn sw.js mit langem max-age ausgeliefert wird: Updates verzögern sich dann bis zu 24 Stunden.
  • Kompatibilität: Chrome 68+, Edge 79+, Firefox 57+ und Safari 11.1+ unterstützen die Eigenschaft. Ältere Browser liefern undefined und verhalten sich in der Regel wie bei "all". Service Worker gibt es nur in sicheren Kontexten (HTTPS oder localhost).