Sonstiges

WordPress Plugins: WP Cache 2.0 installiert

Was ist WP Cache 2.0:

WP-Cache is an extremely efficient WordPress page caching system to make your site much faster and responsive. It works by caching Worpress pages and storing them in a static file for serving future requests directly from the file rather than loading and compiling the whole PHP code and then building the page from the database. WP-Cache allows to serve hundred of times more pages per second, and to reduce the response time from several tenths of seconds to less than a millisecond.

Wer also Perfomance-Probleme mit WordPress hat, wenns mal etwas mehr Aufrufe sind (schätze grob ab 10.000 Seitenaufrufen am Tag), möge sich das Plugin als Lösung anschauen. Bei mir sieht es so aus, daß die Startseite 165 MySQL-Queries erzeugt und ein Einzelartikel knapp 145 Queries. Bei 10.000 Seitenaufrufen wären das also rund 1.5 Mio DB-Read-Abfragen. Da ich kein MySQL Experte bin, vermag ich nicht zu beurteilen, ob das viel oder wenig ist. Da auf meinem Server allerdings noch mehr Blogs am Laufen sind, eines davon mit ca. doppelten Traffic als das Blog hier, kann sich das wohl schnell hochschaukeln. Das Plugin cacht nicht etwa DB Anfragen – soweit ich es verstanden habe -, sondern erstellt Kopien einmal aufgerufender PHP-Seiten in einem physischen Cacheordner. Das sollte meinem Verständnis nach auch zu einer Reduktion der DB Abfragen führen. Übrigens, WordPress 2.0 arbeitet exakt andersherum: Es cacht DB-Afragen statt PHP Files.

Nach einer ganz leicht aufwändigeren Installation ist das Teil nun scharf (Plugin aktivieren, Optionen aufrufen, dann WP Cache enablen und den Anweisungen folgen, die an sich sehr easy sind, u.a. muss wp-config.php beschreibbar sein, da WP Cache einen Zusatzeintrag generiert). Das schöne am Plugin: Man kann bestimmte Bereiche der Seite weiterhin dynamisch belassen, indem man den PHP Code in einer eigenen WP Cache-Funktion umschließt bzw. es ist ebenso möglich, bestimmte URL-Strings von dem Caching auszunehmen bis zu hin zu kompletten PHP Files.

Habe nunmehr die Ablaufzeit der gecachten Files (Startseite etc…) auf 15 Minuten eingestellt, so daß man spätestens nach 15 Minuten Änderungen auf der Startseite sieht. Also neue Kommentare, Artikel (?) etc… anbei die Liste der aktuell gecachten Files inkl. Angabe der Expiration Time und der Filegröße.

Mal gespannt, was es bringt, nachdem gestern die DB kurz abgeraucht war oder ob es uU Probleme in der Aktualität der angezeigten Daten bei Mehrfachbesuchern gibt, die das Blog in kurzen Zeitabständen aufrufen.

Laut Ricardo Galli (ist das nicht auch der mit dem Digg-Klon namens Meneame???) verbessert sich die Perfomance erheblich. Siehe Grafik (logarithmisch)

Updates:
1. Habe auf der Startseite das Problem mit dem Kommentarplugin „Smart Unread Comments“ in Zusammenhang mit WP Cache. Erstellt jemand einen neuen Kommentar, wird mir der auf der Startseite oben rechts richtigerweise als ein neuer, ungelesener Kommentar angezeigt. Gehe ich in das Posting, um den Kommentar zu lesen und wieder zurück zur Startseite, dürfte dieser Kommentar nicht mehr als ungelesen auftauchen, also garnicht. Tut er aber. Im Kommentarverlauf zum Wp-Cache 2.0 Tool habe ich bei Kommentar 214+215 die Lösung entdeckt, die mit dem Cookie-Handling zusammenhängt. WP Cache berücksichtigt Cookies, dass diese nicht mit gecacht werden. Aber nur, wenn sie den Begriff „wordpress“ enthalten. Smart Unread Comments setzt jedoch ein Cookie mit dem Bezeichner „posts_timeout“. Daher der Fehler, daß gelesene Kommentare fälschlicherweise als Ungelesen angezeigt werden. Also ab in die WP Cache Datei wp-cache-phase1.php, runter zur Funktion wp_cache_get_cookies_values und das Wortmatch erweitern um preg_match(„/^wordpress|^posts_timeout|….. Mal sehen, obs klappt, sobald hier ein neuer Kommentar reinkommt. Denn mit eigenen Kommentaren kann man es nicht testen.

Update 2: Jani Tarvainen hat einen Benchmark-Test vorgenommen:
The benchmarks compare performance using Siege (version 2.6.1), WordPress blog CMS (version 1.5.2), WP-Cache plugin for WP (version 2.0), eAccelerator PHP-accelerator module (version 0.9.3) and mod_rewrite Apache module (Apache 1.3.33).

siehe auch WordPress: Plugins = Performance-Killer?

Über den Autor

Robert Basic

Robert Basic ist Namensgeber und Gründer von BASIC thinking und hat die Seite 2009 abgegeben. Von 2004 bis 2009 hat er über 12.000 Artikel hier veröffentlicht.

21 Kommentare

  • Sollte einiges bringen. Comments sollten übrigens sofort sichtbar sein, da dass das Plugin „mitbekommen“ sollte, wenn sich was geändert hat — also ein Kommentar geschrieben wurde oder du einen Artikel verändert hast.

  • Frage: Ich habe den Artikel noch um die MySQL Queries ergänzt. Wenn nun das Plugin die PHP Files cacht, die man abgerufen hat (zB Artikel XYZ.php), sollten doch zugleich auch die DB Abfragen sinken, oder etwa nicht? Wenn aber ein gecachtes PHP File auch die Comments.php automatisch inkludiert, wie bekommt das Plugin dann Änderungen innerhalb der Ablaufzeit von 15 Minuten mit?

  • btw, was ich jetzt schon feststellen kann, ist das optische Ladeverhalten der Seite: Rufe ich einen bereits einmal geladenen Artikel erneut auf, wird die Seite nicht mehr peu á peu aufgebaut (erst Background, dann Header, dann Content, dann Sidebar), sondern man sieht beim Aufrufvorgang unten in der Statuszeile nur den Ladebalken, die Ursprungsseite bleibt einen Moment stehen und wenn der Ladebalken voll ist, machts pling und die Seite ist da. So hängt die gefühlte Perfomance von der Bandbreite + Festplatte des Servers ab. Ist die Seite n.n. im Cache, ist das Ladeverhalten wie gehabt und dürfte sogar etwas langsamer sein, da WP Cache das File noch schreiben muss (wenn es erst nach dem Schreiben die Seite freigibt zur Darstellung, weiss ich aber nicht)

  • Eine Frage an die Experten zum Prinzip: Wäre es nicht sinniger, bspw. auf der Startseite einen so kleinen wie möglichen Query einzubauen, der überprüft, ob neue Inhalte vorhanden sind, und wenn ja, wir der/die grösseren Queries „aktiviert“, ansonsten passiert nix. Erscheint mir irgendwie sinnvoller als die 15-min-Variante.

  • […] Robert hat jetzt das WordPress-PlugIn WP-Cache 2.0 auf BasicThinking installiert. Über die Kommentare zu seinem ersten Posting sind interessante Zahlen zur Menge der Datenbank-Abfragen veröffentlicht. Ein Grund für mich hier mal nachzusehen: – Indexseite: ca. 60 Abfragen – Artikelseite: ca. 20 Abfragen Die Anzahl der Abfragen ist nicht konstant und scheint mit der Menge an Komentaren etc. zusammen zu hängen. […]

  • Update 1 scheint nicht zu funktionieren ….
    Btw, kannst du nochmal bei mir vorbeikommen und ein paar Testkommentare machen und mir genau sagen, wann der Fehler kommt ? Ich bekomm ihn nicht reproduziert …

  • ExpressionEngine vs WordPress

    Robert Basic erwähnt, dass seine Index-Seite ohne ein bestimmtes WP-Plugin zum Cachen 165 SQL-Queries für den Aufbau benötigt. Eine unglaubliche Zahl!

    512MB.net hingegen, das mit der unerreichten ExpressionEngine läuft,…

  • @Jona, ja, stelle ich gerade fest. Hm…ich werde probieren, zusätzlich die Funktion der Unread Comments zu dynamisieren, denn WP Cache wird wohl die Ausgabe auf der Startseite komplett cachen.

    Und Tests — ja, probier ich mal in einem anderen Artikel mit 0 Kommentaren

  • Wie bringe ich ein WordPress Weblog in Bedrängnis?

    Wer bis heute annahm, dass nur MT-Weblogs und Perl dem Server zu schaffen machen kann, der wird dieser Tage eines Besseren belehrt. Interessante Berichte bringen Erkenntnisse insbesondere für WordPress-Fans. Wie bei Robert Basic im Weblog berichte…

  • Ich hab‘ WP-Cache auch vor kurzem installiert und bin noch ein wenig verwirrt, wenn ich mir unter den Optionen die Liste der gecachten Seiten anschaue – da wird nämlich ein und dieselbe Seite zum Teil mehrmals aufgeführt, auch wenn das „Haltbarkeitsdatum“ noch nicht überschritten wurde. Ist das normal? Müsste die Seite nicht eigentlich EINMAL gecacht werden und dann wird bis zum Ablauf des MHD immer nur diese statische Seite ausgeliefert?

  • […] Es ist seltsam, aber ich finde, dass WordPress sehr unperformant ist, sprich es verwendet viel zu viele Queries, um Post, Kommentare, Links usw anzuzeigen. Auch Robert Basic hat dies gemerkt, denn sein Blog brauchte ohne das Cache System auf der Startseite rund 170 Queries, eine für einen Programmierer unvorstellbare Zahl. Damit könnte man paarmal die komplette Datenbank auslesen! […]

  • Ich habe mir kurzerhand meinen eigenen Blog geschrieben, zwar nicht so viele Features und komfortabel wie WordPress aber meiner Meinung nach völlig ausreichen. Dazu eben aktuell nur 9 Datenbankabfragen.

  • hi,
    ich habe wordpress 2.0.2 und habe das plugin installiert aber leider scheint es nicht zu laufen …
    habe alles nach anleitnung gemacht…
    aber bei gechasten Daten zeigt er nichts an (0).
    Hilfe

  • […] Tuningmaßnahmen: 1. Anzahl Artikel auf Startseite von 25 auf 15 reduziert = lädt schneller, da weniger Daten 2. Plugin Ultimate Tag Warrior (11 Queries) aus index.php raus (unterhalb des Artikel: “weitere Artikel zu: Tag1, Tag2, …”), damit auf Startseite nicht mehr sichtbar = weniger MySQL Last 3. Aus index.php eine single.php erstellt und dort UTW Functions eingebaut = weniger MySQL Last auf Startseite, dafür etwas mehr in Einzelansicht 4. Sämtliche Plugins, die mit der Anzeige von “die letzten X Kommentare” zu tun haben, sind aus Startseite und allen anderen Seiten entfernt worden, dafür in eigenen Punkt “Dialoge” geschoben (á la Living in WoW-Blog) = weniger MySQL Last, da Dialogseite von wenigsten aufgerufen wird 5. WP Cache deaktiviert, da ich es momentan nicht brauche. Ja, es schont die Performance ungemein, doch jetzt habe ich keinen erhöhten Traffic und in Zeiten ohne Not fällt das etwas irritierende Ladeverhalten auf, rein visuell gesehen. Inwiefern? Man ruft eine Seite X auf, WP Cache schaut im Hintergrund nach, ob die Seite im Cache-Ordner vorhanden ist, wenn ja, siehst Du einen Ladebalken und peng, die Seite ist auf einmal da. Nix mit zeilenweisen Aufbau/Rendering der Website. Das ist wie gesagt gewöhnungsbedürftig und ich möchte die Leser nicht damit irritieren, solange ich WP Cache nicht unbedingt benötige. Wenn Not an Perfomance ist, wird WP Cache aktiviert und das komische Rendering wird sekundär = Hammer rausholen, wenn man ihn braucht […]