Tipps & Tricks #3: eZ Publish Performance messen und Caching
Eine schnelle Website freut nicht nur die Nutzer sondern auch Suchmaschinen und den Webmaster. eZ Publish stellt eine Reihe von Funktionen und Werkzeugen zur Verfügung, um die Geschwindigkeit zu messen und zu optimieren. Wie kann ich die Ladezeit meiner eZ Publish Website optimieren? Für eine Standard Website mit den Standard Templates sind nur wenige Optimierungen notwendig. Werden viele neue Templates erstellt, so lohnt sich ein Tuning durchaus! Bevor es an die Optimierung geht, gilt es zunächst herauszufinden, warum die Website ggf. langsam ist.
Wie messe ich die Geschwindigkeit?
Man kann natürlich die Seite mit einem Browser öffnen und die Zeiten messen. Diese Messung würde jedoch auch die Übertragungszeit, welche von der individuellen Internetverbindung abhängt, mit einbeziehen. Zudem wäre nicht ersichtlich, an welchen Stellen genau die Zeit zum Seitenaufbau benötigt wird. eZ stellt ein ziemlich gutes Tool zur Verfügung, um die Seiten genau zu messen.
Folgende Einstellung genügt, sie kann vorübergehend sogar auf Seiten, die bereits produktiv sind, eingesetzt werden:
site.ini
[DebugSettings] DebugOutput=enabled DebugByIP=enabled DebugIPList[]=89.121.122.99
Die Debug Ausgaben erscheinen nur, wenn die Website mit der eingetragenen IP-Adresse (hier 89.121.122.99) aufgerufen werden!
Nun sollte am Ende der Seite eine Reihe von Meldungen erscheinen. Besonders interessant ist die Tabelle am Ende der Seite:
Schockierend ist hier oft ein Wert (die „1“ hier im Beispiel ist wunderbar und steht für ein gut getuntes eZ) :
Nicht selten werden für eine Seite über 500 queries gemeldet! Selbst wenn die Zeit für die queries bei scheinbar harmlosen 0.1 sekunden liegt ist dieser Wert alarmierend: hinter jeder query stecken viele Aufrufe von Methoden und Templates, die CPU Zeit kosten! Zu sehen ist dies an der Zeit, die für „Template processing“ angezeigt wird.
Aber: Wie sieht eine gut getunte eZ Seite aus?
Eine schnelle eZ Seite mit der aktuellen Version (4.5 oder community project 2011.8) dürfte nur 1-2 mysql queries aufweisen. Die Ladezeit einer Seite liegt dann je nach System bei ca. 0,1 Sekunden.
Erste Hilfe
Was tun, wenn die Seite mehr als 2 Queries zeigt?
1. Wichtig: settings prüfen!
Ich habe bereits viele langsame eZ Seiten gesehen. Ein Blick in das setup genügt oftmals schon: das Caching war ausgeschaltet! Viele Entwickler vergessen, das Caching auf dem Live Server einzuschalten oder es gab Probleme mit der gecachten Seite.
Wie finde ich die wichtigsten Caching Einstellungen? Folgendes Script findet diese Lücken:
$siteINI = eZINI::instance( 'site.ini' ); $viewCache = $siteINI->variable('ContentSettings','ViewCaching'); $templateCache = $siteINI -> variable('TemplateSettings','TemplateCache'); $templateCompile = $siteINI -> variable('TemplateSettings','TemplateCompile'); $errors = 0; $errors += checkSettings ($viewCache, "enabled", "Turn on ViewCaching!"); $errors += checkSettings ($templateCache, "enabled", "Turn on TemplateCaching!"); $errors += checkSettings ($templateCompile, "enabled", "Turn on TemplateComile!"); if ($errors) { echo "Bitte Einstellungen pruefen!"; } else { echo "Einstellungen sind in Ordnung"; } function checkSettings (string $setting, string $check_for, string $error_msg) { if ($setting <> $check_for) { echo $error_msg . "\n"; return 1; } return 0; }
Aufruf: php bin/php/ezexec.php check_cache_settings.php -s ger
“ger” steht für den siteaccess, der geprüft werden soll.
Es prüft die wichtigsten Einstellungen und gibt Tipps, welche Einstellungen fehlen.
Die Einstellungen vornehmen und die Seite neu laden.
2. eZ Tuning
Das mächtigste Werkzeug zum Tunen der Website heißt caching! eZ nutzt wie fast alle CMS Systeme verschiedene Caching-Verfahren, um die Seite zu beschleunigen.
Caching kann aber auch unerwartete Probleme erzeugen und deshalb schalten viele eZ Entwickler den Cache erst gar nicht ein. Davon rate ich dringend ab. Ein eZ ohne Caching ist wie Auto fahren mit angezogener Handbremse.
Um das Caching verstehen zu können, möchte ich zunächst die wichtigsten Caching Verfahren von eZ vorstellen. Intern verwendet eZ noch wesentlich mehr caches, aber nicht alle sind für die Entwicklung und das Tuning wichtig.
Daher möchte ich zunächst nur zwei Caching-Verfahren vorstellen:
- den Content Cache
- den Templateblock Cache
Beide Verfahren sorgen dafür, dass zeitaufwändige Aufgaben nicht unnnötigerweise mehrfach ausgeführt werden. Das Ergebnis wird gecacht und der nächste Nutzer erhält gecachte Daten.
Im Grunde genommen ist es sehr einfach, diese beiden Verfahren zu unterscheiden:
- der Content Cache wird verwendet, um Inhalte (eZ Dokumente) zu cachen. Der Cache optimiert die mit der Template Anweisung {module_result.content} ausgebenen Inhalte (es gibt einige Ausnahmen, die ich mal später beschreibe).
- Template Block Cache optimiert die Ausgabe ausserhalb des module_result.content Bereichs! D.h. dieser Cache wird hauptsächlich im Pagelayout und dort verwendeten sub Templates genutzt.
Jeder, der diesen Unterschied beherzigt, wird mit dem Caching wunderbar schnelle eZ Seiten erhalten und auch die meisten Caching Fallen umgehen.
Der Contentview Cache ist sehr einfach einsetzbar: Sobald ViewCaching eingeschaltet ist, ist der Cache aktiv. Die Cache Daten werden im var Verzeichnis gespeichert.
Für den Templateblock Cache ist etwas mehr Arbeit notwendig. Daher widme ich diesem Thema einen eigenen Artikel. Beim nächsten Mal werde ich den Templateblock Cache genauer vorstellen.