Let the cache flow
F7 veröffentlicht neue Extension im TYPO3 Extension Repository
TYPO3 ist für seinen leistungsfähigen und flexiblen Caching-Mechanismus bekannt, der auch komplexe Zusammenhänge erfassen kann. Dies ist wohldokumentiert in der offiziellen Dokumentation oder auch in der Artikel-Serie von b13.
Doch es gibt Szenarien, in denen die bestehenden Mechanismen (wie Tags) an ihre Grenzen stoßen. Hier setzt die "CacheFlow"-Erweiterung an, die ein kontinuierliches und automatisches Auffrischen der gecachten Seiten ermöglicht.
Grundidee und Mechanik
"CacheFlow" sorgt dafür, dass die ältesten gecachten Seiten regelmäßig abgerufen, ihr Cache invalidiert und anschließend frisch gecached werden. Priorisierte Seiten, etwa solche mit geänderter Sichtbarkeit, werden automatisch erkannt und zuerst verarbeitet. Dies garantiert, dass den Besuchern der TYPO3-Website stets aktuelle Inhalte präsentiert werden.
Ein typisches Beispiel ist die Verwendung von Inhalten einer Seite - wie etwa eines Bildes aus den Seiteneigenschaften als Teaser - auf anderen Seiten. Ändert ein Redakteur dieses Bild, wird nur der Cache der eigentlichen Seite invalidiert - nicht aber der aller Seiten, auf denen der Teaser erscheint. Bei einer unübersichtlichen Referenzierung müsste bei jeder Änderung der gesamte Cache geleert werden, was ineffizient ist.
Hier greift "CacheFlow" ein: Das normale TYPO3-Cache-Lifecycle bleibt unverändert, jedoch werden im Hintergrund zyklisch alle Seiten der Website nacheinander invalidiert und der Cache wird erneuert. Dadurch werden Änderungen wie Teaser-Bilder zeitnah verarbeitet, ohne die Performance der Website zu beeinträchtigen. Um dies zu ermöglichen, wird der Tabelle 'pages' ein neues Feld namens 'last_flowed' hinzugefügt. Bei jedem Durchlauf, auf dem eine Seite erfasst wird, wird der aktuelle Zeitstempel in diesem Feld gespeichert. Beim initialen Durchlauf werden alle Seiten erfasst; anschließend lässt sich die Batch-Größe konfigurieren. In jedem weiteren Durchlauf werden zunächst die priorisierten Seiten verarbeitet, während der Rest durch die Seiten mit den ältesten 'last_flowed'-Einträgen ergänzt wird. Das Ganze wird über einen CLI-Befehl ausgeführt, der regelmäßig über einen Scheduler-Task aufgerufen wird.
Dashboard Widget und Performance
Im Dashboard des Backends gibt es ein Widget, welches relevante Statistiken (Dauer des aktuellen Durchlaufs, Durchschnittszeit aller Durchläufe, geschätzte Zeit für Gesamtdurchlauf, Datum des ältesten Durchlaufs) anzeigt. Dies soll dabei helfen, einen besseren Überblick über Status und Performance zu erhalten. Bei unseren Tests mit mehreren größeren Projekten (5.000 bis 10.000 Seiten) hat sich ergeben, dass ein Gesamtdurchlauf durchschnittlich 1 bis 2 Stunden gedauert hat. Somit garantiert CacheFlow, dass auch Änderungen komplexer Zusammenhänge zeitnah ausgespielt werden. Eine Beeinträchtigung der Serverleistung im Produktivbetrieb durch die Prozesse im Hintergrund besteht nicht.
Kritische Überlegungen
Um die Erweiterung so minimalistisch wie möglich zu halten, wurden bewusst kleinere Schwächen in Kauf genommen. Wird zum Beispiel eine Seite oder ein Inhaltselement geändert und die "normale" TYPO3-Core-Cache-Invalidierung ausgelöst (oder der Cache per Befehl geleert), ändert sich der Wert von "last_flowed" nicht. Dies könnte dazu führen, dass diese Seiten früher als andere (möglicherweise relevante Seiten) erneut gecached werden. Um dies zu verbessern, könnte man darüber nachdenken, das CacheFlushEvent zu beobachten oder einen DataHandler-Hook zu nutzen.
Fazit
Die "CacheFlow"-Erweiterung macht vor allem dann Sinn, wenn die Webseite komplexe Inhaltselemente und Datenstrukturen hat, die von der TYPO3-Caching-Konfiguration nicht mehr erfasst werden. Hier bietet die Extension eine einfache und wartungsarme Ergänzung, um sicherzustellen, dass inhaltliche Änderungen zeitnah, korrekt und performant im Frontend ankommen.
Extension: extensions.typo3.org/extension/cacheflow
Dokumentation: docs.typo3.org/p/f7media/cacheflow/1.0/en-us
Repository: github.com/f7media/cacheflow