WordPress abspecken – CPU Nutzung minimieren, Server entlasten, Ladezeit verkürzen

Weil mein Blog auf kostenlosen Webhostern läuft/lief habe ich mir Gedanken darüber gemacht, wie ich die CPU Nutzung so gering wie möglich halten kann, um den Server nicht unnötig zu belasten. Zudem gilt/galt es das CPU Limit nicht zu überschreiten und die Webseite für die Besucher so dauerhaft zu gängig zu halten.

Also sah ich mich nach Möglichkeiten um, Unnötiges zu blockieren oder zu entfernen und wenn es geht die Last auf externe Dienste auszulagern. Dabei war immer wichtig auch die Ladezeit des Blogs zu verbessern beziehungsweise nicht zu verschlechtern.

Hier eine kleine Zusammenfassung meiner Erkenntnisse:

Nicht alles bezieht sich ausschließlich auf WordPress und kann auch bei anderen Seiten angewendet werden.

 

1. Updates

Es sollte eigentlich selbstverständlich sein, sowohl WordPress als auch die installierten Plugins immer aktuell zu halten und verfügbare Updates so schnell wie möglich zu installieren. Oftmals gibt es neben Sicherheitsupdates auch Verbesserungen, die die Last und Ladezeit verringern.

2. Nur die nötigsten Plugins

Fast jedes installierte Plugin benötigt etwas Rechenleistung. Daher sollte auf alles Überflüssige verzichtet werden, manches aber aufgrund der Sicherheit installiert sein. Etwa: Limit Login Attempts, Zwei-Faktor-Authentifizierung, Remove IP

3. Widgets vermeiden

(Aufwenige) Widgets mögen zwar gut aussehen und eventuell auch etwas Arbeit sparen, doch auch sie sollten auf ein Minimum reduziert werden oder wenn möglich, gar nicht verwendet werden.

4. Spam bekämpfen

Womöglich ist es dir schon aufgefallen, bei meinen nötigsten Plugins findet sich keines zur Spam Bekämpfung. Bei größeren Seiten kann es durchaus sein, dass ein Plugin wie Antispam Bee unverzichtbar ist, bei kleineren kann Spam aber auch mit WordPress-Bordmitteln im Zaum gehalten werden.

Dazu wählt man im WordPress Interface links in der Spalte Einstellungen -> Diskussion

Dort kann man z.B. einstellen:
Bevor ein Kommentar erscheint muss der Autor bereits einen genehmigten Kommentar geschrieben haben.

Außerdem ist es sinnvoll die Anzahl der Links auf 1 oder 2 zu begrenzen.

Jetzt kommen wir aber zum Wichtigsten, die Kommentar-Blacklist.

Hier lassen sich Begriffe, Emailadressen oder IPs eintragen um solche Kommentare automatisch als Spam einzustufen. Um jetzt nicht alles selbst eintragen zu müssen gibt es hier schon eine vorgefertigte Blacklist. Man kopiert einfach diese Liste in das Kommentar-Blacklist Feld seiner WordPress Installation und speichert das Ganze mit einem Klick auf Änderungen übernehmen am Ende. Die Liste kann man jetzt noch individuell erweitern und so den Spam gezielt abfangen.

WordPress Kommentare Blacklist

5. Bilder optimieren

Bilder lassen sich oft ohne sichtbaren Qualitätsverlust verkleinern und laden dann natürlich schneller und verbrauchen weniger Ressourcen. Selbst optimiere ich meine Bilder mit Gimp:

  • .png: Bild -> Modus -> indiziert -> optimale Palette erzeugen -> Umwandeln -> Exportieren
  • .jpg: Datei -> Exportieren als -> Qualität 90, in den erweiterten Optionen nur die Felder Optimieren und Progressiv ankreuzen, alles andere leer lassen -> Exportieren

Eine andere Methode bieten diese beiden Online-Komprimierer, mit denen sich eine erstaunliche Reduzierung der Dateigröße erreichen lässt:

6. Bilder auslagern

Werden die Bilder gar nicht vom eigenen Server geladen, reduziert sich natürlich die Belastung zusätzlich. Zu diesem Zweck kann man einen externen Bilderhoster verwenden, der werbefreies Hotlinking erlaubt, etwa PicFlash oder img.bi.

Dazu sollte man sich aber die jeweiligen AGBs und Datenschutzbedingungen der Dienste ansehen! Hier verwende ich PicFlash. Dort landen die Bilder 3 Stunden im Browsercache und es werden keinerlei Daten der Nutzer erhoben, also keine IPs gespeichert.

7. Crazy Lazy

Wie wäre es, wenn Bilder nur geladen werden, wenn der Besucher auch tatsächlich in der Nähe dieser ist? Dafür ist bei mir Crazy Lazy installiert. Es reduziert nicht nur die Serverlast, sondern wirkt sich auch überaus positiv auf die Ladezeit des Blogs aus.

8. RSS Feed auslagern

Je nach Abonnentenanzahl eures RSS Feeds kann es durchaus sinnvoll sein, diese auch auszulagern. Da FeedPress leider auf ein Bezahlmodell umgestiegen ist, ist Feedcat vielleicht eine gute Alternative. Bei diesen Angeboten wird der eigene Feed gecached gespeichert und die Anzahl der Abonnenten kann verfolgt werden. Nun verlinkt man auf seiner Webseite einfach auf den ausgelagerten Feed.

9. Caching

Caching reduziert nicht nur die Ladezeiten einer Webseite, sondern entlastet auch die CPU des Servers nicht zu knapp. Bei WordPress bietet es sich an, das schlanke Cache Enabler Plugin oder das Rundum-sorglos-Paket W3 Total Cache zu installieren. Dabei kann es je nach Hosting-Anbieter, installierten Plugins und verwendetem Theme zu jeweils anderen „kleineren“ Schwierigkeiten kommen. Eine allgemeingültige Anleitung zu den Einstellungen lässt sich nicht so einfach verfassen. Einfach die einzelnen Funktionen austesten…

HTML, CSS und Javascript komprimiert und zusammengefasst auszuliefern ist ebenfalls eine gute Idee und mit Autoptimize schnell gemacht.

Zusätzlich zu Cache Enabler, oder wenn man kein Plugin verwenden möchte, beziehungsweise ein Caching Plugin nicht funktioniert, kann man auch seine .htaccess Datei händisch anpassen und Caching und Kompression Server-seitig aktivieren. Dazu editiert man entweder seine .htaccess auf dem Webserver oder lädt diese per FTP herunter, editiert sie und lädt sie wieder hoch.

Bei mir wurde Folgendes in der .htaccess ergänzt, was die Ladezeit und CPU Nutzung erfolgreich reduzierte und zugleich meinen Page Speed erhöht hat:

Link zum Code

10. Böse Bots Server-seitig aussperren

Sogenannte Bad Bots bringen keinerlei Nutzen für den Webseitenbetreiber und können ganz leicht mit Hilfe der .htaccess blockiert werden. Mehr Informationen dazu und eine fertige, regelmäßig aktualisierte Sperrliste gibt es bei blackphantom.de.

Htaccess Bad-Bots aussperren

Zusätzlich kann es nicht schaden, Semalt-Bots in der .htaccess zu blockieren: Liste

11. Sinnlosen Crawlern den Zugriff verbieten

Wer nur Crawlern der großen Suchmaschinen Zugriff auf seine Webseite gewähren möchte, kann „sinnlose“ Crawler in der robots.txt anweisen, die Seite nicht zu durchsuchen. Obwohl die robots.txt nicht verpflichtend gilt, halten sich doch viele daran und belasten dann den Server nicht mehr unnötig.

Dazu fügt man in seiner robots.txt folgende Zeilen ein.

robots.txt Crawler aussperren

12. Seitensuche auslagern

Eine Suchbox kann durchaus eine Bereicherung für die Besucher darstellen, benötigt aber auch Ressourcen, wenn sie benutzt wird. Um nun nicht komplett auf eine Suche zu verzichten kann man z.B. eine Suchbox von DuckDuckGo einbinden. Diese kommt auch bei mir in der rechten Spalte zum Einsatz.

13. CDN benutzen

Ein Content Delivery Network trägt ebenfalls dazu bei, die Serverbelastung zu mindern und die Ladezeit zu verbessern. Ein kostenloser Anbieter ist z.B. CloudFlare. Um es zu nutzen, muss man allerdings in der Lage sein, die Nameserver bei seinem Domain Verkäufer zu ändern.

14. Datenbank optimieren

Mit der Zeit sammelt sich in der Datenbank einiges an Datenmüll an und verlangsamt somit unter anderem das Laden der Webseite. Bei den meisten Hosting-Anbietern lässt sich in den MySQL-Einstellungen direkt die Option Datenbank optimieren auswählen. Ansonsten kann dies ganz leicht mit phpMyAdmin erledigt werden.

WordPress Datenbank optimieren

Zudem ist es oft auch sinnvoll die alten Revisionen bereits veröffentlichter Beiträge zu löschen. Dazu in phpMyAdmin einloggen, auf SQL klicken und folgenden Code ausführen:
delete FROM wp_posts WHERE post_type = 'revision';
Wer sein Tabellenpräfix geändert hat, muss statt wp_ sein eigenes Präfix einsetzen.

WordPress Revisionen löschen
Vorher aber immer unbedingt ein Backup der Datenbank machen!

15. Weniger Posts auf der Startseite

Positiv wirkt sich außerdem aus, die Anzahl der Beiträge auf der Startseite zu reduzieren.

16. Login Bereich absichern

Gerade durch Bruteforce-Attacken auf den Login-Bereich bei WordPress fällt eine hohe Serverlast an. Um die Attacken schon frühzeitig zu beenden und den Server nicht unnötig zu belasten gibt es so einige Methoden:

  • XML-RPC Schnittstelle abschalten, wenn nicht benötigt. Diese wird neben Bruteforce auch für DDoS genutzt: Anleitung
  • Eine zusätzliche Passwortabfrage vor der eigentlichen Login-Seite: Anleitung
    Das ist leider nicht immer möglich, oder gewünscht, siehe dazu den Punkt darunter.
  • Die Login-Seite nur in bestimmten Ländern aufrufbar machen, falls ein zusätzlicher Passwortschutz keine Lösung ist. Den Code in die .htaccess Datei einfügen, und sie ist z.B nur noch mit einem deutschen ISP erreichbar:
    # BEGIN Zugriffsschutz
    <Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from .de
    Satisfy Any
    ErrorDocument 403 http://hello.bruteforce.bot
    </Files>
  • Bots, die durchkommen und versuchen sich mit den üblichen Usernamen, wie admin einzuloggen, einen 403 Fehlercode zurücksenden: Anleitung Das funktioniert aber nur, wenn der eigene Nutzername nicht bei $my_username_arr = array( aufgelistet ist!

17. Echten Cronjob nutzen

Für zeitgesteuerte Aufgaben nutzt WordPress eine Art pseudo Cronjob. Unter anderem wird so nach Updates gesucht, geplante Veröffentlichungen erledigt, Pingbacks gesendet und vieles mehr. Leider passiert dies nicht in regelmäßigen Abständen, wie es bei Cronjobs normalerweise üblich ist, sondern immer dann, wenn ein Besucher auf die WordPress-Seite kommt. Meist also viel zu oft, als eigentlich nötig wäre. Um diese unnötige Belastung zu vermeiden und zudem die Ladezeit noch zu verbessern, benutzt man einfach einen richtigen Cronjob und deaktiviert den internen.

Zuerst editiert man die wp-config.php Datei und fügt folgende Zeile hinzu:

Jetzt wird der eingebaute Cronjob nicht mehr bei jedem Seitenbesuch geladen und man kann einen zeitgesteuerten hinzufügen:

Bei den meisten Hostingangeboten lässt sich das mit einer grafischen Oberfläche erledigen. Empfohlen wird ein Intervall zwischen 10 und 15 Minuten. Einfach bei der Zeit alle 15 Minuten auswählen und als Befehl:

wget -q -O http://domain.tld/wp-cron.php?doing_wp_cron >/dev/null 2>&1

(domain.tld mit der eigenen Domain und Endung ersetzen!)

Kann die Zeit nicht ausgewählt werden, oder hat man kein grafisches Interface zur Verfügung, fügt man die Zeit dem Befehl hinzu:

*/15 * * * * wget -q -O http://domain.tld/wp-cron.php 2>&1 > /dev/null

(domain.tld mit der eigenen Domain und Endung ersetzen!)

Steht beim Hosting kein Cronjob zur Verfügung, gibt es auch externe Dienste, wie Cronjob.de.

Nicht getestet

  • 18. Kommentare auslagern auf Dienste wie Disqus

 

Natürlich kann oder will man nicht alle Tipps auf seiner Seite umsetzen – bei mir wurde auch nicht alles realisiert – aber spätestens wenn man Probleme mit dem CPU Limit des Hosters bekommt oder der Server einfach überlastet ist, sollte man sich damit auseinandersetzen. Alternativ kann man auch einfach ein größeres Hostingpaket kaufen :D

 

7 Gedanken zu „WordPress abspecken – CPU Nutzung minimieren, Server entlasten, Ladezeit verkürzen“

  1. Schon alles weitestgehend ok, aber wenn man tatsaechlich ein _ernstes_ Blog betreiben moechte und das auf Seiten wie ubuntuusers(!) verlinkt, macht imho ein Freehoster keinen Sinn bzw. schadet der User Experience sehr.

    Aktuell (~7 Uhr deutscher Zeit) habe ich 2-3s Responsetimes und ich gehe davon aus, dass 7 Uhr keine Peak-Zeit ist. Man bekommt ordentliche VServer fuer wenige Euro im Monat und hat damit so gut wie alles was du beschrieben hast erstmal erschlagen.

    g
    r

    1. Naja, muss jeder selbst entscheiden, wieviel Geld er für so ein Hobby ausgeben möchte. Fahre mit kostenlosen Hostern eigentlich ziemlich gut.
      Warum man dann allerdings nicht auf Seiten wie ubuntuusers verlinken darf verstehe ich nicht ganz…
      Doch, die etwas längere Antwortzeit am Morgen ist ganz normal:
      Uptime vom fliegentoeter.eu

  2. Bilder auslagern: Scheißidee. Zu viele Hoster machen zu oder ändern URLs oder löschen Bilder nach einer gewissen Zeit. Hab ich anfangs gemacht, viele Beiträge waren nach einigen Jahren schlicht leer.

    1. Damit muss man natürlich rechnen.
      Bei einem kostenlosen Hoster bleibt einem jedoch fast nichts anderes übrig. Wird ein Artikel irgenwo verlinkt und hunderte Besucher kommen plötzlich auf die Seite ist das CPU Limit ruck zuck überschritten und die Seite 24 Stunden offline.
      PicFlash wird zudem im ngb.to als Bilderhoster verwendet und ich hoffe es hält sich. Habe vorab auch den Entwickler gefragt, was die Zukunft so bringen könnte.

      Vielleicht verwende ich einen Kompromiss und hoste die wichtigsten Bilder bei Artikeln, die Jahre lang gültig sind selbst. Bei einem Artikel zu Ubuntu 13.10 ist es z.B. ja relativ egal, wenn in einem Jahr die Bilder verschwunden sind.

    2. Wir lernen: Keine kostenlosen Hoster. ;-)

      (Oder, noch besser: lokale Backups! So groß können Bilder kaum sein, wenn du sie postest.)

    3. Naja, wenn man mal ein paar ausprobiert hat und den Richtigen gefunden hat, lebt man auch nicht mit mehr Einschränkungen wie bei einem „Billighoster“.

      Backups mache ich nach jedem Post und natürlich habe ich auch alle Bilder lokal auf der Platte.

      Also bei meinem ersten Beitrag, der auf ubuntuusers zu sehen war, hatte ich das CPU Limit schon überschritten dank ein paar Bildern, die immer von meinem Hoster geladen wurden, wenn sich jemand auf ubuntuusers meinen Artikel angesehen hat. Muss aber dazu sagen, dass ich die Bilder da noch nicht optimiert hatte und nur 10% CPU Limit hatte. Mittlerweile sind meine BIlder im Schnitt 70% kleiner und ich muss mir keinen Kopf mehr über CPU Limits machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.