-->

Speed Tuning für WordPress

Ich nehme an, dass die meisten von euch mindestens ein Webprojekt mit WordPress besitzen – wieso auch nicht, die Vorteile liegen auf der Hand : Es ist unkompliziert, leicht erweiterbar, hat eine unglaubliche Community mit super Plugins und Themes, es gibt unzählige Tutorials etc.
Ein ewiges Problem ist und bleibt aber die Performance – im Vergleich zu schlanken CMS Systemen wie Drupal geht WordPress relativ schnell in die Knie, wenn sich zuviele Besucher gleichzeitig auf eurer Seite tummeln.
Dafür verantwortlich sind neben dem verbesserungswürdigen Code und der hohen Anzahl an Datenbank-Querys vor allem das (in der Basisinstallation) nicht vorhandene Caching, die fehlende komprimierung via gzip, das laden von unzähligen css und js files (jeder File-Aufruf vom Browser an den Server erzeugt natürlich wiederum Serverlast). Ebenfalls wichtig, und leider von den meisten vergessen: leverage browser caching, dazu später mehr.

Caching für WordPress

Beginnen wir mit dem effektivsten Schritt: Das Cachen der Seite, die WordPress bei einem Request ausgibt. Im Idealfall werden nicht nur die MySQL Querys gecached, sondern eine (nahezu komplett) statische Version der Seite angelegt. Hier gibt es mittlerweile unzählige Caching-Lösungen wie Ultra Cache, Hyper Cache, WP-Cache, WP-SuperCache, W3 Total Cache etc. Ich möchte hier gerne zwei Plugins besonders hervorheben: SuperCache und W3. W3 Total Cache ist ein sehr neues Caching Plugin – es ist eine “All in One” Lösung, dass neben dem normalen Cachen auch Code-Minimierung vornimmt, mit CDNs arbeiten kann(bsp. Amazon S3) und mehr. Meine persönliche Meinung: Für eine Komplettlösung super, durch das gezielte Einsetzen mehrerer, spezialisierter Plugins / Tweaks lässt sich da wesentlich mehr herausholen. Ich empfehle daher immer wieder mein absolutes Lieblings-Cache-Plugin: WP-SuperCache.

Ursprünglich auf WP-Cache basierend, ist das Plugin derzeit das non-plus-ultra und bietet neben dem Erstellen der statischen Seiten auch GZIP-Komprimierung. Normale Caching Plugins liefern die gespeicherten Seiten meistens nicht an Suchmaschinen aus – dieses Plugin macht das, sofern die SuperCache Methode gewählt wurde. Das Plugin kann entweder nur “WP-Cache” (Half on) oder “WP-Cache & SuperCache” (On) nutzen – letzteres ist wesentlich schneller und sollte daher unbedingt gewählt werden. Kleine Anmerkung: Auch wenn ihr SC aktiviert habt, werden manche Seiten automatisch “nur” WP-Cached – was  verwendet wird, entscheidet das Plugin automatisch. Bitte beachtet, dass die Installation des Plugins etwas “tiefere” Eingriffe in das System macht. Ebenso schreibt es (bzw “will schreiben” – je nach CHMOD Einstellungen müsst ihr die Ergänzung selber vornehmen) einige Code Zeilen in die .htaccess – solltet ihr das Plugin also deinstallieren wollen, nutzt unbedingt das Uninstaller-Script!

leverage browser caching

Nachdem der erste und wichtigste Schritt für ein schnelleres WordPress gelegt wurde, geht es ans Feintuning. Bis jetzt hatten wir ausschließlich Server-basiertes Caching – schauen wir und jetzt das lokale Caching an. Dabei geht es darum, dass der Browser bestimmte Objekte (Vor allem Grafik und Flash) nicht bei jedem Seitenaufruf neu lädt, sondern lokal zwischenspeichert. Einerseits werden so weniger Requests an den Server gesandt –> Weniger CPU-Last, andererseits müssen weniger Daten übertragen werden –> schnellerer Seitenaufbau, jippy! Wichtig ist hier das bereits genannte leverage browser caching. Die Caching angaben werden in die .htaccess Datei geschrieben, was leider nicht von jedem Hoster unterstützt wird – probiert es aus, wenn der Blog nicht mehr geht, wisst ihr die Antwort :-) Ich nutze bei allen meiner WordPress Sites folgenden Code:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/x-icon “access plus 5184000 seconds”
ExpiresByType image/gif “access plus 5184000 seconds”
ExpiresByType image/jpg “access plus 5184000 seconds”
ExpiresByType image/png “access plus 5184000 seconds”
ExpiresByType text/css “access plus 5184000 seconds”
ExpiresByType text/javascript “access plus 5184000 seconds”
ExpiresByType application/javascript “access plus 5184000 seconds”
ExpiresByType application/x-javascript “access plus 5184000 seconds”
</IfModule>

Diesen Codeteil schreibt ihr ganz unten in die .htaccess und besucht eure Seite. Wenn sie lädt, wunderbar – wenn nicht, schreibt den Code an eine andere Stelle in der .htaccess (zB am Anfang). Sollte es trotzdem nicht funktionieren, klopft bei eurem Hoster an – ihr braucht das mod_expires Modul. Wichtig: Viele Browser fordern korrekte Größen Angaben bei Bildern – wenn möglich, fügt euren <img> Tags Breite & Höhen Angaben hinzu. Da die meisten (halbwegs guten) Themes das automatisch machen, sollte es hier aber zu keinen größeren Problemen kommen.

Feintuning

Es geht ans Feintuning – mittlerweile ist lokales und Server-basiertes Caching aktiv, die Performance des Blogs sollte sich spürbar verbessert haben. Probieren wir nun, die Anzahl der nötigen HTTP Requests zu minimieren. Wie bereits geschrieben, muss jede Datei, die zum Seitenaufbau nötig ist (zB js, css) jedesmal neu vom Browser angefordert werden (Sofern kein leverage browser caching aktiv!) – bei den meisten Blogs schätze ich mal, dass es ca. 4 CSS und ebenfalls 3-4 JavaScript Files gibt – wäre es nicht schön, jeweils eine große CSS und nur eine JS Datei zu haben? Vorweg – gerade bei stärkeren Servern lohnt sich das meiner Erfahrung nach nur selten – solltet ihr aber nach wie vor Performance Probleme haben oder wollt einfach das Maximum rausholen, empfehle ich euch das Plugin PHP Speedy WP. Das Plugin ändert den <header> Teil eures Blogs so, dass lediglich zwei PHP Datein (1x für CSS, 1x JS) aufgerufen werden, die aus den verschiedenen CSS bzw JS Files generiert wurde. Problematisch wird das wiederum beim leverage browser caching, da meines Wissens kein Browser bereit ist, PHP Datein zu cachen. Wenn irgendwie möglich, wäre es daher sicher “sauberer”, die CSS Files manuell zusammenzufügen und diese dann im Header unterzubringen. Meiner Meinung nach zahlt sich PHP Speedy WP trotzdem aus ;-)

Für alle, die auf besonders hohe PageSpeed Werte stehen, hier noch ein paar Tipps:

1) Unnötige Plugins raushauen – vor allem Statistik Plugins erzeugen relativ viel Last.

2) Ein “optimiertes” Theme nehmen, das mit relativ wenig Requests auskommt

3) Yahoo! Smush.it nutzen: Das Online Tool prüft, in welcher Größe die Bilder auf eurer Website angezeigt werden und die tatsächliche Bildergröße – es ist natürlich alles andere
als Vorteilhaft, für ein Thumbnail von 150×150 das Originalbild mit 1000×1000 einfach herunter zu skalieren – Smush.it probiert daher, die Bilder auf eurer Website zu verkleinern. Lasst das Tool über eure Seite laufen (Komfortabel möglich über YSlow –> Tools), besonders erwähnenswert: Ihr könnt Yahoo die Bilder “smushen” lassen und die kleineren Bilder anschließend herunterladen – Top! ;-)

4) Mehrere Hostnames für den Download von Mediendaten: Die meisten Browser bauen nur wenige Verbindungen gleichzeitig zum selben Hostname auf. Wenn ihr einen Teil eurer Bilder zB auf images.domain.tld auslagert, umgeht ihr diese Begrenzung und der User lädt gleichzeitig von eurem derzeitigem Hostname und dem images Hostname.

5) Nutzt Content Delivery Networks wie Amazon S3 – da sich das jedoch nur für die wenigsten auszahlen wird, gehe ich auch nicht näher darauf ein.

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

One Response to “Speed Tuning für WordPress”

  1. Hi danke für die Tipps – fand bisher auch immer das sich WordPress immer sehr schnell hat runter kriegen lassen. Bin gerade bei Bloggerei die Liste durchgegangen und hab dann den Artikel hier gefunden, was ich auf jeden Fall installieren werde ist der WP-Supercache …denke das wird eine Menge bringen.