WordPress mit WP-Cache 2 und Semmelstatz zum laufen bringen
Achtung Nerdblogging! Alle Uninteressierten mal weghören.
Dass meine Seite seit einigen Tagen ein neues Layout hat, haben sicherlich ein paar von Euch schon bemerkt – und wenn nicht: Shame on you, Feedreader! Aber auch im Hintergrund hat sich einiges geändert – so war ein Update auf die neueste WordPress-Version 2.3 genauso notwendig geworden wie auch Anpassungen alter Plugins (Wer hat sich eigentlich ausgedacht, die Tabelle „category“ müsse man der Unübersichtlichkeit halber umtaufen in eine Melange aus „terms“, „taxonomy“ und „relationships“?). Egal.
Da mein Eindruck schon im alten Design seit einer Weile der war, dass jeder Seitenreload eine gefühlte halbe Minute zu lange dauerte und das neue Layout wahrscheinlich nicht zu einer Performancesteigerung beitragen würde, entschied ich mich neben der bereits aktivierten WordPress-eigenen Caching-Funktion zusätzlich eines der wirklich guten Plugins zu installieren: WP-Cache 2.
Die Installation verläuft größtenteils mühelos und beinahe stressfrei. Das natürlich nur insofern man ein erfahrener Programmierer ist. Für alle anderen wird es schon ein wenig schwieriger.
Richtig entsetzlich wird es für Programmierer mit Blog-eigenem Statistik-Plugin, das sie auch nach der Installation noch gerne nutzen möchte. Seiten, die durch WP-Cache eine Performance-Steigerung erleben, führen nämlich keine Plugins aus. Das führt dazu, dass gecachte Seiten ausgesprochen selten in den Statistiken erfasst werden, nämlich immer nur dann, wenn eine Seite vom System neu generiert wird.
Anhand des von mir verwendeten Plugins Semmelstatz möchte ich eine Anleitung geben, wie man doch noch an die begehrten Statistiken gelangt, ohne auf einen externen Dienst wie Google Analytics zurückgreifen zu müssen. (Wobei es für den ein oder anderen interessant sein kann, beides zu nutzen. Google Analytics ist exzellent dafür geeignet, die eigene Webseite nach Marketing-Gesichtspunkten zu analysieren und zu optimieren. Nachteil: Es funktioniert nur bei Browsern mit Javascript-Support und auch nur bei denen, die den Dienst nicht per Adblocker verbannt haben)
Aber der Reihe nach:
1. WP-Cache
WordPress 2.3 wird von Haus aus mit einer einfachen, aber deaktivierten Caching-Routine WP-Cache ausgeliefert. WP-Cache speichert keine kompletten Seiten und könnte als minimal-invasiver Cache bezeichnet werden. Es wird dafür benutzt, um immer wiederkehrende Datenbankzugriffe auf ein Minimum zu reduzieren. Die Performance-Steigerung ist nicht weltbewegend, aber auch nicht zu vernachlässigen. Vor allem für die Anpassung von Semmelstatz ist diese Funktion aber unerlässlich.
Man aktiviert WP-Cache, indem man in der Datei wp-config.php den folgenden Parameter hinzufügt:
define('ENABLE_CACHE', true);
In vielen Fällen sollte der erste Schritt hiermit erledigt sein, da WordPress in der Lage ist, alle weiteren Konfigurationsschritte selbsttätig zu übernehmen:
Zunächst wird ein Verzeichnis „cache“ unterhalb von „wp-content“ erstellt, und darin mindestens 3 weitere Verzeichnise mit wiederum mehreren Unterverzeichnissen.
Leider funktioniert dies nur im Rahmen der Rechte, die der Webserver zulässt. In manchen Apache-Konfigurationen kann es zum Beispiel vorkommen, dass ein Verzeichnis zwar erstellt, ihm aber keine Schreibrechte zugewiesen werden können. Das einzige, was da hilft, ist per FTP das Verzeichnis „cache“ zu löschen, manuell neu zu erstellen und Schreibrechte zuzuweisen. Das muss auch für jedes Unterverzeichnis von „cache“ gemacht werden, insbesondere für diejenigen mit kryptischen Namen, wie „a98c2eefd169547b25afdc“ o.ä. – in meinem Fall wiederholte ich den Vorgang für rund 10 Verzeichnisse.
Es kann sinnvoll sein, hin und wieder im Cache-Verzeichnis nachzusehen, ob ein Plugin versucht hat, ein neues Verzeichnis innerhalb von „cache“ zu erstellen, da die meisten Verzeichnisse nur nach Bedarf und eben nicht sofort angelegt werden. Insbesondere nach der weiter unten beschriebenen Caching-Funktion von Semmelstatz ist es wichtig, dafür zu sorgen, dass auch das Cache-Verzeichnis „semmelstatz2“ (unterhalb des kryptisch benannten Verzeichnisses) Schreibrechte hat.
Eine sichere Methode, die Schreibrechte der Cache-Verzeichnisse zu prüfen, ist nachzusehen, ob mind. eine der Dateien darin eine Größe von mehr als 0 Byte hat.
2. WP-Cache 2
Mit diesem Plugin, das man hier herunterladen kann, beginnt der Zauber von Caching-Funktionen erst richtig zu wirken. Es ist nicht übertrieben, dass die Ladezeit von über 5 Sekunden auf unter 0,2 Sekunden reduziert werden kann. (Kann. Wenn man viele Grafiken, Flash, JavaScripte oder ähnliches auf seiner Seite hat, sieht das natürlich anders aus). WP-Cache 2 nutzt eine Schnittstelle in der Datei wp-settings.php
, um Webseiten nach dem Generieren vollständig in Text-Dateien (im „cache“-Verzeichnis von WP-Cache) zu speichern und bei nachfolgenden Aufrufen nur noch von dort abzurufen. Einmal pro Stunde, nach neuen Postings/Kommentaren oder auch nach Bedarf wird der Cache geleert und die Seiten neu generiert. Gerade für häufig frequentierte Blogs ergibt sich dadurch ein enormer Geschwindigkeitsvorteil.
Zur Installation von WP-Cache 2 sollte man sich an die Beschreibung auf der Seite oben halten. Hier eine kurze Zusammenfassung:
- Unter
Einstellung => Lesen
den EintragBeiträge komprimieren (GZIP)
deaktivieren. - Das Plugin in das „plugins“-Verzeichnis schieben und aktivieren.
- In der Datei wp-config.php den Parameter
define('WP_CACHE', true);
hinzufügen - Unter
Einstellungen => WP-Cache
nachsehen, ob noch weitere Installationsschritte notwendig sind
Es ist wichtig zu verstehen, dass Webseiten-Caching Nachteile in der Interaktivität bringen kann. Viele Seiten enthalten dynamische Elemente, die beim Caching nicht mehr oder nur noch eingeschränkt funktionieren. Es gibt zwar Möglichkeiten Teile einer Seite trotz des Caches dynamisch zu belassen (=> How do I make certain parts of the page stay dynamic?), jedoch sollte man wissen, dass in diesem Fall weder die WordPress-eigenen Funktionen noch der Datenbankzugriff zur Verfügung stehen. Selbst das in WordPress native Caching steht bei WP-Cache 2 gespeicherten Seiten nicht zur Verfügung – das ist aber genau der erste Schritt, den wir ändern müssen, um unser Statistik-Plugin zum laufen zu bringen.
3. Semmelstatz 2.6
Es gibt eine Vielzahl von Statistik-Plugins da draussen, und jeder hat seine Gründe, warum er das eine schöner, bunter und erotischer findet als das andere. Ich nutze seit meinen ersten Blogger-Tagen die Semmelstatz von Kopfhoch-Studio, die ich für meine Bedürfnisse angepasst habe. Statistischen Daten erhebt das Plugin mit der Funktion sem_writeStatz()
im WordPress-Hook „wp_head“. Grundsätzlich tut das Plugin auch bei aktivierten WP-Cache 2 noch seinen Dienst – leider aber nur noch, wenn eine Seite neu generiert wird und nicht, wenn das System bereits Gecachtes ausgibt. Da dies mit WP-Cache 2 aber eher die Regel ist, verliert das Plugin seinen Wert. Um es doch noch zu retten, habe ich einen Hack entwickelt, der für den ambitionierten WordPress-Nutzer verhältnismässig einfach zu installieren ist.
Installieren Sie den folgenden Hack nicht, wenn Sie eines der folgenden Leiden bei sich festgestellt haben:
– Programmiermoralismus
– Regelkonformismus
– Hausmeistersyndrom
– Masern
Abgesehen davon empfiehlt es sich immer, ein aktuelles Backup der veränderten Dateien zur Hand zu haben ;-)
Nachdem alle Warnungen ausgesprochen wurden, hier die Anleitung:
- Zunächst deaktivieren wir Semmelstatz in der Plugin-Administration.
- Danach ersetzen wir in
wp-content/plugins/semmelstatz2/semmelstatz2.php
die Funktionsem_writeStatz()
durch folgenden Code (anklicken zum selektieren): - (Achtung: Fieser Hack!) Jetzt öffnen wir im Startverzeichnis die Datei wp-setting.php und suchen die Zeile:
error_reporting(E_ALL ^ E_NOTICE);
Danach fügen wir folgenden Code ein: - Anschliessend suchen wir unterhalb des eingefügten Codes nach der Zeile
define('WPINC', 'wp-includes');
und löschen sie (denn sie kommt ja bereits in unserem Hack oben vor)
- Zum Schluss suchen wir im Code darunter die folgenden Zeilen:
und löschen alles bis auf die ersten 2 Zeilen:
- Als letzter Schritt wird Semmelstatz wieder aktiviert.
Im Idealfall sollte jetzt alles funktionieren. Durch den Hack werden bei jedem Seitenaufruf die Statistik-Informationen durch den WP-Cache (siehen Punkt 1) zwischengespeichert, und bei der nächsten darauffolgenden Seitengenerierung in die Datenbank geschrieben.
Es ist natürlich klar, dass das Verändern der Datei wp-settings.php
nicht ganz unproblematisch ist, da sie beim nächsten WordPress-Update wahrscheinlich überschrieben und daher erneut angepasst werden muss. Da aber das WordPress-Caching bereits so früh in das System eingreift und das Ausführen von Plugins nicht gestattet (und auch keine Hooks zur Verfügung stehen), schien mir diese Modifikation die einzige Möglichkeit, auch weiterhin Semmelstatz zu nutzen.
Ich hatte auf meiner Recherche nach anderen Lösungswegen einen Hinweis darauf gefunden, dass das Plugin Firestats problemlos mit WP-Cache 2 zusammenarbeitet. Das verblüfft mich zwar etwas, nachdem ich mich in die Caching-Funktionen eingearbeitet habe, aber ich will nicht ausschliessen, dass es stimmt :-) Selbst überprüft habe ich es nicht und kann nur den Tipp geben: Schaut es Euch selbst an.
Bei Anregungen und Hinweisen zu meinem Hack, bitte hier kommentieren: