Web und Entwicklung / CLEARBYTE

JavaScript und CSS aktualisieren, ohne alte Cache-Versionen auszuliefern

Geändertes JavaScript oder CSS erhält eine neue URL, häufig mit Inhalts-Hash im Dateinamen. Diese Dateien können lange gespeichert werden. HTML muss neue Versionen durch kürzere Gültigkeit oder erneute Validierung entdecken können.

In dieser Anleitung

Sieht eine Veröffentlichung im privaten Fenster richtig aus, bei wiederkehrenden Besuchern aber alt, vergleiche zuerst die URLs. Eine neue Serverdatei ersetzt keine noch frische Antwort im Browser-Cache.

Eine verlässliche Veröffentlichung ordnet HTML und Dateien ausdrücklich einander zu. Frühere Dateien bleiben verfügbar, damit bereits offene Seiten ihre passenden Module weiterladen können.

HTML und versionierte Dateien getrennt behandeln

HTML ist ein kleines Manifest. Version A verweist auf app.4c21.js und site.19ab.css; B auf app.9d80.js und bei unveränderten Bytes weiterhin denselben CSS-Namen. Die Hashes sind erfundene Beispielnamen.

Unveränderte Dateien werden wiederverwendet, geänderte erhalten eine neue Cache-Identität. Ein Jahr lang gespeichertes HTML kann weiterhin alte URLs anfordern und die neue Veröffentlichung verbergen.

Beispielvertrag zwischen Versionen
RessourceVersion AVersion BVorgesehenes Verhalten
HTMLVerweist auf app.4c21.jsVerweist auf app.9d80.jsValidieren oder bewusst kurze Gültigkeit wählen
Anwendungs-JavaScriptapp.4c21.jsapp.9d80.jsNeue URL bei geänderten Bytes
Unverändertes CSSsite.19ab.csssite.19ab.cssDieselbe Inhalts-URL wiederverwenden
Frühere DateienVerfügbarFür alte Seiten weiterhin verfügbarFür das nötige Kompatibilitätsfenster behalten

Cache-Direktiven passend zum Vertrag setzen

Für öffentliche Dateien, deren Bytes unter dieser URL nie wechseln, können langes max-age und immutable passen. Bei HTML erlaubt no-cache die Speicherung, verlangt aber Prüfung vor Wiederverwendung. no-store fordert dagegen keine Speicherung. Entscheide je Ressource.

Die Header zeigen eine mögliche Strategie. Prüfe tatsächliche öffentliche Antworten und die Konfiguration des CDN-Caches. Lokale Konfiguration beweist nicht, welche Regeln Browser und CDN erhalten.

Versioned public asset: /assets/app.9d80.js
Cache-Control: public, max-age=31536000, immutable

HTML document: /index.html
Cache-Control: no-cache

The URL /assets/app.9d80.js must continue to serve the same bytes.

Abfrageversionen nur mit passendem Cache-Schlüssel nutzen

/app.js?v=release-b kann eine andere Identität als /app.js?v=release-a haben, wenn alle beteiligten Caches den Parameter berücksichtigen. Ignoriert eine CDN-Regel Abfragen, können beide dasselbe Objekt liefern.

Zufallswerte bei jedem Aufruf verhindern sinnvolle Wiederverwendung. Ein stabiler Hash oder Versionswert ändert sich mit dem Inhalt. Fragmente wie /app.js#release-b gehen nicht in die HTTP-Anfrage und eignen sich dafür nicht.

Die Schicht mit alten Bytes finden

Vergleiche HTML, referenzierte URL und gelieferte Bytes. Bei altem Hash im Dokument prüfe dessen Aktualität. Bei neuer URL mit altem Inhalt prüfe Bereitstellung, Cache-Schlüssel und Ursprung. Stimmen Netzantworten, untersuche eine schon laufende Seite oder einen service worker.

Eine CDN-Leerung löscht keine frischen Antworten aus allen Browsern. Hartes Neuladen ist nur eine lokale Diagnose. Halte fest, welche Cache-Schicht du umgangen hast, damit der Erfolg reproduzierbar bleibt.

  • Endgültige HTML-URL und referenzierte Skript- oder CSS-URL erfassen.
  • Status, Content-Type, Cache-Control, ETag und Cache-Header prüfen.
  • Erwartete Bytes statt einer HTML-Ersatzseite bestätigen.
  • Cache-Regeln eines vorhandenen service workers separat prüfen.
  • Frischen Besuch und eine über den Wechsel offene Seite testen.

Alte Seiten und Rückkehr zur Vorversion ermöglichen

Lade neue Dateien vor dem verweisenden HTML hoch oder schalte die gesamte Veröffentlichung atomar um. Behalte Vorgängerdateien für gespeichertes HTML und offene Tabs; Module können erst Stunden später angefragt werden.

Veröffentliche B mit Dateien von A und B, prüfe B und ermögliche den Rückweg zu A. Sofortiges Löschen von app.4c21.js beschädigt alte Dokumente. Neue Bytes unter diesem Namen verletzen den Inhaltsvertrag und machen Rücknahmen unberechenbar.

Wiederverwendung nach der Funktionsprüfung messen

Prüfe Erstbesuch, Wiederbesuch und neue Version: anfängliche Übertragung, zulässige Wiederverwendung und danach nur geänderte Dateien. Untersuche echte Transfers einschließlich Validierungsanfragen.

Cache-Ersparnis und Übertragungsrechner vergleichen ausdrückliche Annahmen zu Trefferrate, Anfragen und Größe. Sie ersetzen weder öffentliche Headerprüfung noch Messung der tatsächlichen Trefferrate.

Häufige Fragen

Für altes CSS sämtliche Caches abschalten?

Ermittle zuerst das veraltete Dokument oder die Datei und führe stabile Versionen ein. Alles abzuschalten erhöht Übertragung und Latenz, ohne den Veröffentlichungsablauf zu klären.

Ersetzt ein neues ETag sofort eine frische Cache-Datei?

Nicht zwingend. Ein Browser kann frische Antworten ohne Serverprüfung nutzen. Eine neue Inhalts-URL vermeidet diese Abhängigkeit.

Wann dürfen alte Hash-Dateien gelöscht werden?

Nach dem erforderlichen Zeitraum für gespeichertes HTML, offene Seiten und Rücknahmen. Behalte sie, solange unterstützte Dokumente darauf verweisen können.

Quellen und Definitionen

Methode geprüft: