WordPress: Performance verbessern
Mit steigenden Features und steigender Anzahl an Addons und Plugins sinkt leider die Performance eines jeden Scripts.
Auch die bekannte Bloggingsoftware WordPress enzieht sich dessen nicht. Auch in Zeiten von Glasfaserleitungen und Breitbandinternet ist es weiterhin wichtig, einen schnellen Seitenaufbau an den Tag zu legen, da mittlerweile auch Google im PageRank darauf wert legt.
In diesem Beitrag möchte ich euch einige einfache Tipps zur Verbesserung der Performance eures WordPress Blogs zeigen.
WordPress Template aufräumen
Eine Sache, die sich bei WordPress immer anbietet ist die header.php in den Templates soweit es geht statisch zu machen. Standardmäßig sieht der Code des Default Kubrick-Themes beispielsweiße so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
Für die Usability ist das auch durchaus eine tolle Sache – man kann alles toll via GUI im Adminpanel anpassen. Allerdings kann man sich diese ganzen SQL-Queries auf die Datenbank auch sparen, denn eigentlich sollten sich Dinge wie der Seitentitel oder die Feed-URLs eh nicht ändern.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Das ganze macht man nun mit Seitentitel, RSS-URLs, Stylesheets und der Pingback URL.
Wenn man alles angepasst hat, sollte man pro Seitenarufruf mindestens 3 SQL-Queries weniger haben. Im Footer des Templates (footer.php) lässt sich das natürlich gleichermaßen anwenden. Auch dort wird der Titel des Blogs und die Feed URLs aus der Datenbank gehohlt.
WordPress wp_head() entschlacken
Nun kann man noch einige unnötige Sachen aus dem head-Bereich entfernen, welche durch WordPress automatisch hinzugefügt werden. Dazu fügt man diesen Code in der Datei functions.php in seinem Template (wp-content/themes/default/) ein.
remove_action('wp_head', 'wp_generator'); // WordPress Version nicht anzeigen remove_action('wp_head', 'index_rel_link'); // Index Link deaktivieren remove_action('wp_head', 'parent_post_rel_link', 10, 0); // Prev Link deaktivieren remove_action('wp_head', 'start_post_rel_link', 10, 0); // Start Link deaktivieren remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0); // Und noch mehr davon... remove_action( 'wp_head', 'wlwmanifest_link'); // Windows Live Writer Link deaktivieren remove_action( 'wp_head', 'rsd_link'); // "Really Simple Discovery"-Service Link deaktivieren remove_action('wp_head', 'post_comments_feed_link'); // Keinen Extra Feed für einzelne Artikel/deren Kommentare anzeigen
Die entsprechenden Hooks haben dabei folgende Aufgaben:
- wp_generator: Broadcasten der benutzen WordPress Verison
- post_rel_link: Hinzufügen unnötiger Links in den Head-Bereich
- wlwmanifest_link: Wird nur für den Windows Live Writer benötigt
- rsd_link: Really Simple Discovery Link
- post_comments_feed_link: Zusätzliche Feeds für die Kommentare zu einzelnen Posts
Caching Plugin installieren
Da man mit einem „normalen“ Blog zu 95% statischen Content ausliefert, kann man sich nun noch ein Caching Plugin installieren. Das heißt die Seiten werden beim Aufruf nicht Live generiert, sondern es wurde vorher bereits eine statische Version von Ihnen abgespeichert.
Als Beispiele sind hier WP Cache oder WP Super Cache zu nennen (ich verwende letzteres).
Nachteil hier ist natürlich, dass beispielsweiße kann PHP-Code mehr in den Sidebars verwendet werden kann oder bestimmte Statistik-Plugins nicht mehr funktionieren. Dafür ist der Vorteil durch die gewonnene Geschwindigkeit deutlich größer. 😉
Ganz praktisch ist auch noch ein PHP Opcode Cache zu nutzen. Da sich der Code bei einem CMS eher selten ändern, kann fast alles aus dem Cache genommen werden. Hier empfehle ich APC, da der in PHP6 wohl dabei ist. Bringt übrigens bei allen PHP-Skripten etwas.
Auch hilft der memcached. Ich glaube WordPress bietet dafür schon Support an.
Ich persönlich nutze beide Möglichkeiten und inzwischen wird kaum noch ein Skript komplett in OpCode übersetzt.
Danke für den Kommentar. Memcaching und Dinge wie Zend Optimizer und ähnliches hatte ich auch schon im Kopf. Für mich selber finde ich es aber für die eher kleinen Projekte, die auf meinem Server hausen etwas übertrieben. 🙂
WordPress Template aufräumen funktioniert zwar, macht jedoch keinen Spaß, wenn kurz darauf eine neue Version des Templates erscheint… 🙁
Ansonsten beweist diese Seite sehr gut, wie schnell ein WordPress-Blog sein kann, wenn man störenden javascript-code weg lässt und mit wenig HTTP-Requests auskommt + ein Cache-Plugin verwendet.