Zum Inhalt springen

Cache-Warming

Nach einem Deployment, einem vollständigen Cache leeren oder einer großflächigen Invalidierung ist Ihr Cache leer. Der erste Besucher jeder Seite zahlt den vollen Render-Aufwand (MISS). Cache-Warming generiert jede cachefähige URL vorab, sodass Besucher nur noch gecachte Antworten sehen.

Das Warming wird über die Symfony Messenger Queue gesteuert — die Dispatch-Anfrage kehrt sofort zurück, der Worker arbeitet die URLs dann im Hintergrund ab. Der Fortschritt wird in der Datenbank verfolgt und im Admin live gezeigt.

  1. Öffnen Sie Einstellungen → Speed Boost → Dashboard.
  2. Klicken Sie Warmup starten.
  3. (Optional) Überschreiben Sie die Batch-Größe (Standard 50).
  4. Bestätigen. Der Warmup wird an die Queue gesendet.

Das Dashboard zeigt:

  • Gesamt-URLs — beim Start erkannte cachefähige URLs
  • Geprüft — wie viele bisher verarbeitet wurden (Erfolg oder Fehler)
  • Verbleibend — URLs noch in Bearbeitung
  • Prozent abgeschlossen
  • Ein Echtzeit-Panel mit Cache-Statistiken pro Typ, das sich mit dem Schreiben der Einträge aktualisiert

Sie können den Warmup jederzeit aus dem Dashboard Pausieren, Fortsetzen oder Abbrechen.

Die Discovery-Query des Warmups sammelt jede URL, die der Cache verarbeiten kann:

  • Aktive Produkte, die für jeden Sales Channel sichtbar sind (gegen seo_url dedupliziert)
  • Aktive Kategorien, die Teil eines Navigationsbaums sind (gegen seo_url dedupliziert)
  • CMS-Seiten, die einem Sales Channel zugewiesen sind
  • Startseite jedes Sales Channels

Die Query respektiert Sichtbarkeits-Flags, Sales-Channel-Geltungsbereich und SEO-URL-Eindeutigkeit — deaktivierte oder unsichtbare URLs werden übersprungen.

Der Warmup respektiert den Sales-Channel-Switcher in der Seitenkopfzeile. Wenn Sie vor dem Start einen einzelnen Sales Channel auswählen, werden nur dessen URLs aufgewärmt. Mit „Alle Sales Channels” gewählt deckt der Warmup jeden aktiven Channel ab.

Warming läuft auf Symfony Messenger. Der Async-Worker muss laufen:

Terminal-Fenster
bin/console messenger:consume async --time-limit=300

In Produktion betreiben Sie den Worker als langlebigen Prozess (systemd, supervisor oder was immer Sie schon für die anderen Async-Jobs Shopwares verwenden). Ohne laufenden Worker bleibt der Warmup ewig in der Queue — die Warmup starten-Anfrage gelingt zwar und der Fortschrittseintrag wird erzeugt, aber Geprüft bleibt bei 0.

Wenn eine URL einen HTTP-Status außerhalb von 2xx zurückgibt, wird sie als Fehler gezählt, stoppt den Warmup aber nicht. Fehlgeschlagene URLs werden in Warmup-Historie → Detail für den Lauf gelistet, mit Statuscode und einem Ausschnitt der Antwort.

Häufige Gründe:

  • Eine Redirect-Kette (z. B. alte SEO-URL → 301 → neue SEO-URL) — meist okay
  • Eine Kategorie ohne sichtbare Produkte (gibt in manchen Themes 404 zurück)
  • Eine CMS-Seite, die per Berechtigungen vor dem Storefront versteckt ist
  • Ein Infrastrukturfehler (502 / 504) — erneut starten, wenn das zugrundeliegende Problem behoben ist

Jeder Warmup-Lauf erzeugt eine Zeile in der Warmup-Historie:

  • Start- / Ende-Zeitstempel
  • Zähler total / geprüft / fehlgeschlagen
  • Durchschnittliche HTTP-Antwortzeit
  • Status (laufend / pausiert / abgebrochen / abgeschlossen)

Die Detailansicht zeigt einzelne URLs und ihre Ergebnisse. Historie wird unbegrenzt aufbewahrt — manuell löschen, falls nicht benötigt.

Der Warmup ruft URLs standardmäßig über HTTP ab. Wenn Sie HTTPS-URLs (typisch für Produktion) aufwärmen wollen, stellen Sie sicher, dass die Storefront-Domain in Sales Channels → Domains https:// verwendet — der Warmup folgt diesem Schema.

Um den Cache als Teil einer Deploy-Pipeline aufzuwärmen, rufen Sie den REST-Endpoint:

Terminal-Fenster
curl -X POST https://your-shop.example.com/api/_action/p2lab-cache/warmup/start \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"salesChannelId":null,"batchSize":100}'

Die Antwort enthält eine progressId, die Sie per /api/_action/p2lab-cache/warmup/progress?progressId=… pollen können, um auf den Abschluss zu warten.

Siehe REST-API für die volle Endpoint-Liste.

  • Batch-Größe erhöhen, wenn Ihr Message-Worker schnell ist und Sie schneller fertig werden wollen. Standard 50 ist konservativ.
  • Mehrere Worker laufen lassenmessenger:consume async --limit=… läuft in parallelen Prozessen; der Warmup verteilt sich.
  • Invalidierungs-Logging während Warmup deaktivieren, wenn Ihre Invalidierungslog-DB auf langsamer Platte liegt — das Dashboard liefert dieselben Zahlen im Speicher.