← Zurück zu den Artikeln
Performance & Datenbanken

Browser-Caching: Wie Sie Ihre Website dazu bringen, Daten zu „erinnern" und sofort zu laden

Ein praktischer Leitfaden zum Browser-Caching: Cache-Control-Header, ETags mit 304-Antworten, LocalStorage für Client-Zustand und Service Workers für fortgeschrittene Offline-Strategien.

Verfügbare Sprachen
Browser-Caching: Wie Sie Ihre Website dazu bringen, Daten zu „erinnern" und sofort zu laden
Ausgewählter Artikel ↗

Browser-Caching: Wie Sie Ihre Website dazu bringen, Daten zu „erinnern" und sofort zu laden

Cache-Control, ETag, LocalStorage — keine Magie, sondern unverzichtbare Werkzeuge. Lassen Sie uns verstehen, wann und wie man jedes davon einsetzt.

Stellen Sie sich vor: Ein Nutzer besucht Ihre Website zum zweiten Mal, aber sie lädt, als wäre es der erste Besuch — alle Skripte, Styles und Bilder werden erneut heruntergeladen. Frustration, unnötige Anfragen, zusätzliche Serverlast. Kommt Ihnen das bekannt vor?

Die Lösung ist intelligentes clientseitiges Caching. Es geht nicht nur darum, „Dinge zu beschleunigen"; es ist ein grundlegendes Prinzip für den Aufbau schneller, reaktionsfähiger Webanwendungen.

Lassen Sie uns drei Schlüsselmechanismen aufschlüsseln, die jeder Frontend-Entwickler kennen sollte, und verstehen, wann man welchen einsetzt. Zur Klarheit füge ich Beispiele in Laravel hinzu (das Backend übernimmt oft die Cache-Konfiguration).

1. Cache-Control: Der Dirigent des HTTP-Cachings

Dies ist ein HTTP-Header, der dem Browser strikte Anweisungen gibt, wie lange eine Ressource (JS, CSS, Bilder, Schriften) gespeichert werden soll.

  • Cache-Control: public, max-age=3600 — 1 Stunde im Browser-Cache und allen Zwischen-Proxys speichern.
  • Cache-Control: no-cache — cachen, aber immer die Aktualität beim Server prüfen.
  • Cache-Control: no-store — überhaupt nicht cachen (für sensible Daten).

Wann verwenden: Für alle statischen Ressourcen, deren Versionen sich selten ändern (Build-Dateien, Schriften, Icons). Verwenden Sie gehashte Dateinamen (app.a1b2c3.css), damit Sie max-age auf Jahre setzen können.

Beispiel in Laravel (für statische Assets): Sie können Regeln in .htaccess (Apache) oder der Nginx-Konfiguration festlegen, was oft die bevorzugte Methode ist. In Laravel können Sie jedoch Header senden, wenn Sie Assets über eine Route oder Middleware ausliefern:

// In Middleware oder einem Controller zum Ausliefern eines bestimmten Assets Route::get('/static/{file}', function ($file) { $path = storage_path('app/static/' . $file); return response()->file($path, [ 'Cache-Control' => 'public, max-age=31536000', // 1 Jahr ]); });

2. ETag: Leichtgewichtige Aktualitätsprüfung

ETag (Entity Tag) ist ein Hash-Digest einer Ressource, der vom Server generiert wird. Der Browser speichert die Ressource und ihren ETag. Bei der nächsten Anfrage sendet er den ETag im If-None-Match-Header. Der Server vergleicht: Wenn der ETag übereinstimmt, hat sich die Ressource nicht geändert — er gibt eine leere Antwort mit Status 304 Not Modified zurück. Das spart Bandbreite und Zeit.

Wann verwenden: Für Daten, die sich ändern könnten, bei denen eine Prüfung von Grund auf jedes Mal kostspielig ist (Produktlisten, Artikel, API-Antworten).

Beispiel in Laravel: Laravel kann automatisch ETags für Antworten generieren. Oder Sie können es manuell tun:

use Symfony\Component\HttpFoundation\Response; Route::get('/api/products', function () { $products = Product::all(); $content = $products->toJson(); // ETag basierend auf dem Inhalt erstellen $etag = md5($content); // Prüfen, ob der ETag des Clients mit unserem übereinstimmt if (request()->header('If-None-Match') === $etag) { return response(null, 304); // Not Modified } // Antwort mit ETag zurückgeben return response($content) ->header('Cache-Control', 'no-cache') // Cachen, aber via ETag validieren ->header('ETag', $etag); });

3. LocalStorage / SessionStorage: Anwendungsdaten-Cache

Hier geht es nicht um HTTP, sondern um die Web Storage API. Ein vollständiger Key-Value-Speicher im Browser (bis zu 5–10 MB). Synchron, funktioniert nur innerhalb derselben Origin.

  • LocalStorage — bleibt für immer erhalten, bis er gelöscht wird.
  • SessionStorage — lebt nur während der Sitzung (Tab).

Wann verwenden: Für nicht kritische Daten, die für den Betrieb der Client-Anwendung benötigt werden, bei denen Sie Veraltung tolerieren können:

  • Autorisierungs-Token (Vorsicht! besser in HttpOnly-Cookies)
  • Nicht 100 % kritische Daten: UI-Theme-Einstellungen, Formularentwürfe, schnelle Suchergebnisse.
  • SPA-Anwendungszustand nach einem Seiten-Reload.

Frontend-Beispiel (JavaScript):

// API-Antwortdaten speichern async function loadProducts() { const cached = localStorage.getItem('products'); if (cached) { return JSON.parse(cached); // Sofortige Rückgabe aus dem Cache } const response = await fetch('/api/products'); const products = await response.json(); localStorage.setItem('products', JSON.stringify(products)); return products; } // Denken Sie daran, den Cache bei Datenmutation zu invalidieren function clearProductCache() { localStorage.removeItem('products'); }

Fortgeschrittener Profi-Tipp: Service Workers für ultimative Kontrolle

Für volle Kontrolle über Caching und Offline-Funktionalität sollten Sie Service Workers in Betracht ziehen. Sie fungieren als programmierbarer Netzwerk-Proxy, mit dem Sie Strategien wie „Cache First, Network Fallback" oder „Stale-While-Revalidate" implementieren können.

Zusammenfassung: Was, Wann und Warum

  1. Cache-Control + gehashte Dateinamen — für statische Assets (CSS, JS, Bilder). Ergebnis: Der Browser liefert sie von der Festplatte aus, ohne Netzwerkanfragen.
  2. ETag / no-cache — für dynamische Daten und API. Ergebnis: Der Browser stellt eine Anfrage, erhält aber eine leere 304-Antwort, wenn die Daten unverändert sind.
  3. LocalStorage — für den Client-Anwendungszustand. Ergebnis: Sofortiger Datenzugriff bei erneuten Besuchen oder Seiten-Reloads.
  4. Service Worker — für fortgeschrittene Offline- und Performance-Strategien. Ergebnis: Volle Kontrolle über Netzwerk und Cache.

Die goldene Regel: Caching muss invalidierbar sein. Es muss immer einen Mechanismus geben, um veraltete Daten zu bereinigen (über Dateinamenänderung, ETag-Aktualisierung oder manuelles Löschen aus dem LocalStorage).

Eine intelligente Kombination dieser Ansätze reduziert die Anzahl der Anfragen, spart Bandbreite des Nutzers und lässt die Interaktion mit Ihrer Website wirklich sofort erscheinen. Nutzer werden es zu schätzen wissen, und Ihre Core Web Vitals werden sich verbessern.

Technologien & Themen

Artikel-Tags

Keine Artikel entsprechen diesen Filtern.

Haben Sie ein Projekt oder eine Idee zu besprechen?

Lassen Sie uns sprechen ↗