TYPO3-Websites auf Speed!

Oktober 6, 2017 Tim Lochmüller

Ja – Speed! Hier ist nicht das Amphetamin gemeint, sondern eine kürzere Ladedauer. In Zeiten, in denen Google die Geschwindigkeit von Websites als Rankingfaktor benutzt und man auch unterwegs (ja, manche surfen zwischendurch mit 3G) schnelle Websites haben möchte, ist die Geschwindigkeit immer wichtiger geworden. In dem Kontext möchte ich euch gerne die Extension „staticfilecache“ vorstellen.

Wie mehr Geschwindigkeit aufbauen?

In diesem Artikel geht es um die Optimierung der Auslieferungszeit von Websites. Dabei geht es nicht darum ein Bild um 10KB zu verkleinern oder aus einer CSS Datei die Leerzeichen zu entfernen. Derartige Optimierungen sind auch sinnvoll, reduzieren aber nur die Bandbreite der zu übertragenen Dateien und nicht die Zeit der Generierung des HTML Dokumentes.

Das HTML Dokument wird im TYPO3 erzeugt und braucht mal länger und mal kürzer. Ist die Website professionell gebaut, sollten z.B. keine/wenige INT-Objekte im Einsatz sein (Dokumentation). Diese Objekte verhindern, dass TYPO3 den Seiten-Cache vollständig nutzen kann und deshalb ein Großteil der Seite bei jedem Klick erzeugt werden muss. Darüber hinaus gibt es noch eine Reihe von weiteren TYPO3-„No-Gos“. Selbst wenn die Seite über keine INT-Objekte verfügt und „gut gebaut“ wurde, muss TYPO3 bei jedem Klick eines Benutzers die Caches abfragen und die Seite ausliefern. Dafür werden sowohl Datenbankabfragen (oder Redis etc.) als auch PHP benötigt. Und genau dies ist das Problem!

Bei einer von TYPO3 vollständig zwischengespeicherten Website ist die Selektion von Redis/DB und das Interpretieren vom PHP Interpreter das Nadelöhr der Generierung. Hier setzt der Static File Cache an. Nicht jeder ist in der Lage, mit Hardware (Load Balancer, mehr Webserver, Varnish, Redis, mehr Power…) Performance aufzubauen. Static File Cache ist eine Software-Alternative, welche auf nahezu jedem Webserver – auf dem TYPO3 läuft – auch funktioniert.

History of Speed

Die Static File Cache Extension hat schon eine lange Historie. Mit der Extension „fl_staticfilecache“ hat 2006 alles angefangen. Die Extension hat die technische Basis bzw. das Konzept geliefert und funktionierte bis zum letzten Release 2012 nur noch mit TYPO3 Versionen, die heute nicht mehr im Einsatz sein sollten. Im Anschluss gab es die Extension „nc_staticfilecache“, die das Konzept übernommen hat und weiter gepflegt wurde. Ende 2014 habe ich die Entwicklung federführend vorangetrieben, bis Anfang 2016 auch hier die vorerst letzte Version erschienen ist. Mit der Umstellung auf Composer habe ich die Extension erneut geforkt. Die neueste Version ist nicht mehr im TER zu finden (ggf. in naher Zukunft unter dem Extension Key „staticfilecache“) und lässt sich nur mit Composer installieren:

composer require lochmueller/staticfilecache

Weitere Informationen zur Extension sind inzwischen auf GitHub zu finden: https://github.com/lochmueller/staticfilecache

„Doch wie genau funktioniert die Erweiterung?“

Der Static File Cache ist ein Cache, welcher die Grundlagen des TYPO3-internen Caching-Frameworks nutzt, um Dateien im Dateisystem abzulegen. Ein erweiterteres Regelwerk aus 13 Regeln legt fest, ob eine Seite statisch gespeichert werden darf. Ist dies der Fall, wird das erzeugte HTML Dokument im Dateisystem abgelegt. Ist es aufgrund einer Regel nicht möglich, wird dies festgehalten, sodass ein Entwickler weiß, warum manche Seiten nicht schneller werden können als andere. 😉

Liegt die Datei im Dateisystem vor, kümmert sich ein Regelwerk in der htaccess-Datei darum, diese auszuliefern. Der Trick dabei: Wird die Datei ausgeliefert, wird weder PHP noch eine einzige Datenbankabfrage ausgeführt. Die Seite wird vom Apache direkt ausgeliefert und es gibt fast keine Verzögerung durch dahinterliegende Systeme.

Im Hintergrund gibt es zudem diverse Hooks und auch Standard-Prozesse vom TYPO3 Caching-Framework, welche sich darum kümmern, dass die Dateien wieder gelöscht werden, sodass sich redaktionelle Änderungen auch auf die Website auswirken. Seit kurzer Zeit gibt es zudem den „Boost Mode“, welcher das Löschen der Dateien mit einer Queue löst, sodass die „normalen Besucher“ immer eine gecachte Version bekommen und ein „Frontend Cache löschen“ im Backend nicht dazu führt, dass alle Caches neu aufgebaut werden müssen.

Installation

Für die Installation sind nur diese beiden Links wichtig (Apache):

Meine Empfehlung ist, dass über die Extension Manager Konfiguration die Timestamp-Signatur in der Datei aktiviert wird, um zu überprüfen, ob auch wirklich statische Dateien ausgeliefert werden. Im Anschluss kann man den Cache selbstständig testen. Man sollte jedoch darauf achten, dass man mit einer Browser-Sitzung testet, welche nicht im Backend eingeloggt ist.

Schlusswort

Das Entwickeln der Extension macht mir sehr viel Spaß. Feedback, Ideen oder Kritik sammel ich gerne auf GitHub. Zudem habe ich vor einiger Zeit zwei verschiedene TYPO3 Konfigurationen mit einem Apache Benchmark verglichen. Die Auslieferung einer statischen Datei war ca. 200 mal schneller als die Generierung von TYPO3 ohne die statische Datei. Das heißt, wir sprechen hier von einer Preformancesteigerung von 20.000% für das HTML Dokument.

Der Ostwestfale in mir würde sagen „schon nicht schlecht“, der Nerd sagt jedoch: „Das ist wie Amphetamine für mein TYPO3 Projekt!“ 😉

Share This: