Ich hab mich schon öfter (lies: seit Jahren) daran gestört, dass das Blog beim ersten Aufruf gefühlt eine Ewigkeit braucht, bis die Seite aufgebaut ist. Anschließende Zugriffe sind dann deutlich schneller. Klingt nach "da ist Cacheing, aber es läuft zu früh aus".
Ich habe vor geraumer Zeit das PHP mit XCache versorgt, das hat zwar was gebracht, aber nicht viel.
Jetzt hab ich mich endlich nochmal wieder darum gekümmert und habe jeweils zu Apache-, PHP- und MySQL- Performancetuning kurz im Internet recherchiert.
mysqltuner.pl hat mich - neben einigen Hinweisen wie "mach mal die Caches ein wenig größer" - auf "da sind JOINs über Spalten, die keinen Index haben" gestoßen.
Dem bin ich hinterhergestiegen (mysql-slow-query-Log aktiviert, die langsamsten Queries angeguckt und gegengeprüft, welche Spalten der JOINs indiziert sind und welche nicht) und siehe da: Was auch immer die Serendipity-Installations- und Updateroutine macht, Indizes scheint sie nur ganz selten zu erstellen :-(
Von den Indizes, die in der
Datenbankanlage des aktuellen s9y enthalten sind, hat meine Datenbank vielleicht 20% gehabt.
Also mal flugs von Hand angelegt, nochmal etwas auf die Logs geguckt, zwei weitere Indizes nachgeschoben, von denen das offizielle s9y scheinbar selber noch nicht wusste, dass es sie braucht (
serendipity_entrycat(entryid)
und
serendipity_entrycat(categoryid)
) und PUFF!
Jetzt rennt es.
Bei frisch durchgestartetem Web- und Datenbankserver mit kalten Caches kommt die Startseite des Blogs nicht mehr in 8 Sekunden, sondern in 400 Millisekunden
(*) :-)
Faktor 20. Das lass ich mir gefallen. Hoffentlich bleibt das so.
Sternchentext: aktuell sind auf der Startseite ein paar Youtube-Videos, der zugehörige Player und die Vorschaubilder werden asynchron nachgeladen, das ist nicht in den 400ms fertig. Aber dafür der Rest der Seite und er fängt nicht erst nach 7 Sekunden an, die Seite im Browser anzuzeigen und die Youtube-Dinger zu laden… Außerdem scrollen die Videos auch wieder raus, sowas ist hier ja eher die Ausnahme ;-)