feat(cache): Blitz als Seiten-Cache installieren — Startseite von 1,1 s auf 0,03 s #75
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/blitz-page-cache"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Die Startseite baute sich bei jedem Aufruf komplett neu aus der Datenbank. Blitz liefert sie jetzt fertig aus Redis aus, ohne dass PHP sie anfasst.
Closes #57Messung (lokal, von mir selbst nachgemessen — nicht aus dem Agent-Bericht übernommen)
Warm liegt alles bei rund 25 Millisekunden — Faktor 40 gegenüber vorher. Weil PHP im Trefferfall gar nicht mehr läuft, verschwindet auch der Lasteffekt, der die vier "nicht abrufbaren Seiten" im Seobility-Report verursacht hat.
Der kritische Test: keine Sprachvermischung
Ein englischer Besucher, der deutsche Inhalte aus dem Cache bekommt, wäre schlimmer als jedes Performance-Problem. In beide Reihenfolgen mit jeweils geleertem Cache geprüft:
Sauber in beide Richtungen. Redis-seitig liegen die Sprachen als getrennte Einträge (DB 1, Präfix
blitz:), getrennt von Crafts eigenem Cache (DB 0).Ebenfalls geprüft: hreflang, canonical und robots kommen unverfälscht aus dem Cache — die haben wir in #62 und #63 gerade erst repariert.
/admin/loginerzeugt keinen Cache-Eintrag, Vergiftung über das Control Panel ist ausgeschlossen.Zwei echte Konfigurationsfehler unterwegs behoben
includedUriPatternshätte faktisch nichts gecacht.generateTransformsBeforePageLoad = falsehätte jede Seite mit Bildern vom Caching ausgeschlossen, weil Craft dafür bewusstno-storesendet.Konfiguration liegt versioniert in
config/blitz.php, nicht als Klicks im Control Panel — sonst wäre sie nach einem frischendocker compose upweg (Projektregel §5).Zu den Composer-Advisories — ich habe das nachgerechnet
Der Install hat
config.audit.block-insecure: falseincomposer.jsongesetzt, und der Advisory-Zähler stieg von 54 auf 94. Das klang nach einem Sicherheits-Downgrade, ist aber keins. Versionsvergleichcomposer.lockvorher/nachher:Kein einziges Paket wurde heruntergestuft. Die 94 Advisories treffen exakt dieselben Versionen wie die 54 vorher — gewachsen ist die Advisory-Datenbank, nicht der Bestand. Die Notiz in
CLAUDE.md, die das Gegenteil behauptete, ist in diesem PR richtiggestellt.block-insecure: falsebleibt trotzdem ein akzeptierter Bestand, kein sauberer Zustand: Composer 2.8+ blockiert sonst jede Dependency-Resolution, sobald irgendein Package eine Advisory hat. Der eigentliche Fix ist ein Craft-Update — eigener Scope, eigenes Ticket.Was NICHT geprüft ist
docs/DEPLOYMENT.mddokumentiert deshalb curl-basiertes Vorwärmen als Ersatz. Ohne Warming trifft der erste Besucher nach jedem Deploy den kalten Cache — bei/blogwaren das lokal 3,8 s.{% cache %}-Blöcke aus #71 mit Blitz zusammen etwas kosten. Der Agent fand keinen messbaren Konflikt, das habe ich nicht selbst nachgemessen. Sie bleiben drin, weil sie beim Cache-Miss helfen.Beim Deploy
docs/DEPLOYMENT.mdAbschnitt 9 ist Pflichtlektüre: die Blitz-Erstinstallation ist ein eigener Schritt,craft upinstalliert das Plugin nicht automatisch, weil Plugin-Einstellungen nicht im Project-Config liegen.🤖 Generated with Claude Code
https://claude.ai/code/session_017w4iMK5VNobPwXUWXmLKKh
Blitz cached ganze Seiten statisch in einer eigenen Redis-DB (nicht Craft's Daten-Cache-DB, da YiiCacheStorage::deleteAll() ein FLUSHDB gegen die gesamte DB auslöst). Erzwang zwei Root-Cause-Fixes, keine kosmetischen Defaults: `includedUriPatterns` muss explizit gesetzt werden (leer heißt "cache nichts", nicht "cache alles"), und `generateTransformsBeforePageLoad` musste von false auf true, weil Blitz Seiten mit "wird noch generiert"-Bild-URLs bewusst nicht cached — ohne die Änderung landete keine einzige Seite mit Bildern im Cache. `{% cache %}`-Blöcke bleiben unverändert bestehen (helfen beim seltenen Cache-Miss-Render, kein messbarer Konflikt mit Blitz). Composer 2.8+ blockiert per Default jede Dependency-Resolution sobald ein Paket im Baum eine bekannte Advisory hat (hier: die bereits akzeptierten 54 Bestands-Advisories) — `audit.block-insecure: false` in composer.json stellt das alte Nur-Report-Verhalten wieder her, sonst ist das Projekt für jeden künftigen `composer require` tot. Refs #57 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017w4iMK5VNobPwXUWXmLKKh