WordPress-Blog frisieren: Mehr Speed durch apc, cache und gzip.

Google zwitschert es nun schon seit Wochen von den virtuellen Bäumen und so langsam kann man sich dem „Hype“ rund um das Geschwindigkeits-Tuning der eigenen Webseite nicht mehr entziehen.

Gestern dann kam das Fass zum überlaufen. Peer Wandiger reizte mit seinem Traffic-Tipp Newsletter zum Thema „Webseiten Geschindigkeit“, Google erklärt das Thema zum Ranking-Faktor und mein Kollege in Bern bastelt an einer Seite herum, die in Kürze wohl etwas mehr Besucher zu erwarten hat und deswegen im Vorfeld „tiefergelegt“ werden muss.

Also: Carpe Diem und Los… Schnappen wir uns einen virtuellen Server und schauen mal was „off-site“, also ohne am Content selbst etwas zu verändern, zu erreichen ist.

Die Ausgangslage ermittle ich mit Apache-Benchmark (ab) von einem virtuellen Hosteurope Server L, V. 4.0 aus. Parallel starte ich eine Abfrage über Uptrends.com. Diese Seite stellt kostenlos einen ganz netten Ladezeit-Report zur Verfügung.

Im Urzustand, also mit einer nackten WordPress-Installation und purem Standard-Apache lädt die Testseite, www.segelrevier.ch, ein wenig zäh.
Es handelt sich bei Segelrevier.ch um ein privates Projekt von mir, mit genügend Ballast um allen Kriterien eines „schlecht optimierten“ WordPress-Blogs zu entsprechen. Insbesondere der Tipp von Peer Wandiger, möglichst auf Bilder zu verzichten, lässt sich auf segelrevier.ch schlecht umsetzen, da Fotos ein wichtiger Bestandteil eines Segel-Blogs sind.

Laut Uptrends lädt die 813,2 Kilobytes von www.segelrevier.ch in 9,9 Sekunden. ApacheBench schafft 20 Abfragen pro Sekunde, eine mediane Connect-Time von 486 ms und eine Transfer-Rate von 1065.22 Kbytes/Sek. Berühmt ist das nicht.

Schnellere Ladezeit durch WP-Cache.
Zunächst einmal versuche ich nun das naheliegendste: Ich aktiviere ein Caching-Modul, das als Plugin verfügbar ist. Da ich aufgrund interner Statistikabfragen in der Page-Source nicht so gerne auf die Segnungen von PHP und MySQL verzichten möchte (auch nicht im Cache-Zustand einer Seite), entscheide ich mich nicht für den WP-SuperCache, der das gesamte Blog in eine statische HTML-Seite verwandelt. Es kommt der normale WP-Cache zum Einsatz.

Die Aktivierung des Caching Moduls dauert gut eine Minute, ich übernehme die Grundeinstellung und starte den Apache Benchmark erneut.
Die Ladezeit verringert sich, bis auf den ersten Abruf, enorm: 379 (!) Requests pro Sekunde, 20094.65 Kilobyte pro Sekunde Transfer-Rate und eine Median-Connectzeit von 12(!)ms sprechen eine deutliche Sprache. Allerdings gibt es auch Aussetzer, wohl beim Aufbau des Caches lahmt die Seite deutlich: 46948 ms für den langsamsten Abruf. Danach zündet aber der Turbo!? Uptrends spricht hier eine andere Sprache. Laut denen dauert der Abruf der gesamten Seite etwas länger als ohne Caching-Modul: 10,7 Sekunden. Ein Blick auf die Auswertung gibt aber Peer Wandiger Recht: Der Hinkefuss sind die Bilder. Obwohl nicht sonderlich gross, summieren sich die Abrufzeiten und einzelne Grafiken verlangsamen die Seite enorm.

Mehr Server Speed mit apc.
Also versuche ich noch mehr aus dem Server herauszukitzeln. Diesmal verlasse ich dazu den lokalen Raum der WordPress Installation und öffne die Motorhaube des virtuellen Servers bei Hosteurope. Nur Root ist gut :)
APC ist der „Alternative PHP-Cache“. Mit diesem in den Webserver Apache einzubindenden Modul werden durch das Zwischenspeichern der php-Seiten in ihrem kompilierten Zustand, der Overhead des Parsens und Kompilieren nahezu eliminiert. Es existieren kommerzielle Produkte mit derselben Funktionalität, aber diese sind weder OpenSource noch frei verfügbar. APC gibt es hier zum freien Download.

Wenn Sie, so wie ich, einen virtuellen Hosteurope Server mit Ubuntu zur Verfügung haben, können Sie APC aber auch ganz einfach von der Root-Shell aus installieren. Dauert keine fünf Minuten. Nur sollte vorher ein Image-Backup über KIS gemacht werden, man weiss ja nie…

1. apc installieren:

sudo apt-get install php-pear php5-dev apache2-prefork-dev build-essential
sudo pecl install apc
sudo apt-get remove php5-dev apache2-prefork-dev build-essential

2. apc einbinden

nano /etc/php5/conf.d/apc.ini

extension=apc.so
apc.apc.stat = 0
apc.include_once_override = 1
apc.shm_size = 64

3. apache restart
/etc/init.d/apache2 restart

Evtl. Fragen des Installers können einfach mit „Enter“ beantwortet werden.
Danke an Michel für dieses Kurz-Tutorial!

Kurz zusammengefasst: Die Verwendung von APC allein, ohne WP-Cache bringt einen spürbaren Performance-Gewinn.
Die Transfer-Rate beträgt 1455.84 KB/Sek. und die mediane Connect Zeit 324 ms. Nur die Seitenladezeit ist… mit 11.8 Sekunden nahezu unverändert und wird wieder von den Bildern ausgebremst. Positiver Seiteneffekt: Auch alle anderen auf dem Server gehosteten Domains profitieren von apc, nicht nur WordPress. Ich habe einige Typo3 Webseiten auf dem selben Server, die nun ebenfalls fixer zu Werke gehen ;)

Aber weiter, es gibt ja noch „GZIP“ und „mod_deflate“.

Von führenden Suchmaschinenherstellern empfohlen: GZIP.
Auch hier kommt der Griff in den Maschinenraum. Denn per Standard ist mod_deflate, wie das Kompressionsmodul des Apache heisst, bei Hosteurope nicht in die Serverkonfiguration eingebunden und daher auch nicht aktiviert.

Aber die Aktivierung dieses Moduls kostet keine Minute:

Tippen Sie auf der Root-Shell einfach nur:

a2enmod deflate

und dann:

/etc/init.d/apache2 restart

fertig.

Und das Ergebnis? Mit apc und gzip Kompression fühlt sich www.segelrevier.ch schon schneller an. Obwohl die Transferrate von 1361.09 KB/Sek. und die mediane Connectzeit von 354 ms langsamer sind als apc ohne gzip Kompression. GIDZipTest bescheinigt Segelrevier aber eine Kompressionsrate von 72.6% – Hier sind es wohl mal wieder die Bilder, die die Kompression rechenintensiv und vor allem nutzlos machen, denn jpeg ist ja bereits hochkomprimiert. Da muss ich wohl noch etwas feintunen ;)
Ach ja, die Ladezeit bei Uptrends.. 10.3 Sekunden. Der Fotos wegen. Noch Fragen? Ja!?
Ich soll jetzt bitte schön den Cache wieder einschalten? Gut.

Voll Turbo, oder was?
WP-Cache, APC und mod_deflate im Blog Tuning.
Kurze Rede: 15 ms Median-Connect Zeit, 21343.17 KB/Sek. Transferrate bei über 400 Abfragen pro Sekunde.
Und Uptrends? Mit 6,6 Sekunden Ladezeit scheint mit dieser Kombination der Turbo wirklich gezündet, obwohl auch hier die Bilder der Hemmschuh bleiben. Das lass ich jetzt mal so und schaue wie sich das in der Praxis bewährt.

Jetzt muss ich mal überlegen, wie ich das mit den Bildern mache ;) Denn ohne geht’s nicht..

Für alle, die bis hierhin durchgehalten haben, gibt es hier die einzelnen Benchmarks dieses Artikels als PDF zum runterladen:

Zu diesem Tuning-Versuch inspririert hat mich der Newsletter von Blogprojekt.de. Danke Peer, für diesen interessanten Vormittag, den ich mit meinem Webserver verbringen durfte.

Wenn auch Sie einen Webserver brauchen, der sich vielfältig konfigurieren lässt und bei dem der Support des Anbieters stimmt, empfehle ich die Vserver von Hosteurope.

4 thoughts on “WordPress-Blog frisieren: Mehr Speed durch apc, cache und gzip.

  • Hi,

    ich bin gerade über das Thema „WordPress und APC“ hier gelandet. Danke für die Infos und vor allem die Zahlen der Messungen – werde mich mal näher damit beschäftigen.

    Die Lösung für dein Bilder-Problem ist btw. einfach: Browser Caching. Um das initiale Laden kommst du natürlich nicht herum, aber beim zweiten Request können Bilder ja auch aus dem lokalen Cache kommen (unter der Annahme, dass sich Bilder ja nicht oft ändern).
    http://httpd.apache.org/docs/2.0/mod/mod_expires.html

    In der VHost-Konfiguration fehlt dann noch ein etwa solcher Eintrag:
    ExpiresActive on
    ExpiresByType image/jpg „access plus 30 days“

    Viele Grüße,
    Sebastian

  • Hi! Finde den Artikel gut. Ob es in deinem Fall helfen wird ist eher unwarscheinlich. Wie dem auch sei, dem ein oder anderen hilfts vielleicht weiter. Ich habe auf einer meiner Seiten mit Affiliate Werbung das Problem gehabt, dass Aufgrund der vielen mini Icons und logos die im navigationsbereich eingebaut sind die ladezeiten ins unermessliche schossen.

    Das ganze war recht einfach gelöst. Statt einzelner Logos, habe ich alle logos in einer einzelnen Bilddatei eingefügt und platziere sie via css. Dieser Artikel hat mir gut geholfen dabei:

    http://www.alistapart.com/articles/sprites ich weiß nicht obs dazu schon was deutsches gibt ,keine ahnung, google hilft sicher, einfach nach image sprites css suchen ;)

  • Pingback: Anonymous

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.