Seit heute Abend lassen wir das Plugin WP-Cache 2 laufen. In der vorigen Woche bekamen wir intensive Probleme mit dem Plugin, da während des Cachings selbst der Output irgendwie hängen blieb. Zuerst dachte ich an ein Problem mit unserem mod_rewrite. Doch mit zahlreichen echo „error1“; Bastelaktionen kam ich dem Geheimnis hinter. Nun habe ich mich durch all die Funktionen geforscht und stellte fest, dass eine kleine Inkompabilität im Programm mit höchstwahrscheinlich der auf unserem Server eingesetzten PHP Version 5.1.2 und Apache/2.0.52 Version zusammenhängt.

Genau kann ich das natürlich nicht behaupten, jedoch half es in Zeile 219 der Datei wp-cache-phase2.php folgendes zu ändern:

Zeile 219: ob_end_clean();
ändern in
Zeile 219: // ob_end_clean();

Einfügen in Zeile 232: ob_end_flush(); // unsere Modifikation

Das ursprüngliche flush() Kommando, was ich vorsorglich in dem Script belassen habe, verhält sich sogar laut php.net ein bisschen irreführend:

Server modules for Apache like mod_gzip may do buffering of their own that will cause flush() to not result in data being sent immediately to the client.

Sei’s drum, nun haben wir das ganze mit dem ob_end_flush() gelöst. Schön anzusehen ist dabei, dass die meisten Caches nur ausgespuckt werden, wenn das Original mit den Datenbankabfragen nicht innerhalb von 1 Sekunde geladen wird… hmmm!

Problem: Siehe die Kommentare. Es wird so anscheinend nichts mehr im Cache gespeichert. Sofern noch etwas altes im Cache drin ist, wird das zwar ausgegeben, doch keine neuen Dateien werden im Cache erzeugt.

Nachtrag: Mir fiel ebenfalls auf, dass das durch WordPress initierte GZIP-Encoding (Admin -> Options -> Reading -> WordPress should compress articles (gzip) if browsers ask for them) den gesamten Seitenaufbau verlangsamt hat, bevor ich WP-Cache 2 aktiviert habe. Gewiss, eine kleine Funktion zum Zippen muss vom Webserver bei jedem Seitenaufruf gestartet werden, aber anscheinend nahm es Ausmaße von über 1 Sekunde pro Seite an. Jetzt ist die Ladezeit recht gering… ok, ich sollte Feierabend machen! ;)

8 Kommentare
  1. BloggingTom sagte:

    Steht da nicht irgendwo im Readme von WP Cache, dass gzip in der WordPress-Konfiguration sowieso ausgeschaltet werden muss? Hab da so was im Hinterkopf…

  2. Mike Schnoor sagte:

    @Rob – Danke. Es hatte mich gestern Abend noch gute 1.5 – 2 Stunden gekostet. Aber dafür läuft es jetzt anscheinend.

    @Tom – Ja klar, solange ich das WP-gzipping nicht ausschalte, läuft WP-Cache2 sowieso nicht. Das war Voraussetzung für die Aktivierung des Plugins. Dennoch verhielt sich das zusätzliche gzipping wie eine extreme Bremse.

  3. Mike Schnoor sagte:

    Ok… jetzt habe ich WP-Cache2 deaktiviert. Zwar wurde ich das lästige Problem, dass ich beim ersten Cache-Versuch eine weisse Seite ohne Inhalt erhielt, endlich los, jedoch wurde über Nacht so ungefähr gar nichts gecached. Zwar wurde das Cache-Verzeichnis mit HTML Dateien vollgestopft, doch fand sich in der Admin nur „0 Cached Pages“ wieder.

    Fazit: Scheiß auf WP-Cache2, wenn ich mal geSPONed werden sollte, dann gibt’s ein rudimentäres Template. Feddich basta. :(

  4. Stefan Evertz sagte:

    @Mike: Spannendes Thema, da ich bei ersten Tests auf ähnliche Probleme gestossen bin. Wie bist du denn die weißen bzw. leeren Seiten los geworden? Und wieso hat er denn trotz der deaktivierten Komprimierung komprimiert (oder was meinst du mit zusätzlichem gzipping)?

  5. Mike Schnoor sagte:

    ===================
    Wordpress mit gzip-compressing
    ===================

    Ohne das Plugin kann man ja von WordPress ein zusätzliches gzip aktivieren, was sich unter „Admin -> Options -> Reading -> WordPress should compress articles (gzip) if browsers ask for them“ befindet. Das ist also das „zusätzliche gzipping“ oder „gzip-compressing“.

    Dieses aktivierte Feature von WordPress machte die Seiten anscheinend recht langsam, und für die Startseite oder Artikel kamen locker 1.5 – 2.5 Sekunden an Ladezeit zusammen. Ohne dieses gzip-compressing sind wir hier zumindest mit 0,6 Sekunden Ladezeit wieder recht schnell unterwegs.

    Daher habe ich gzip-compressing vorerst abgestellt.

    ===================
    Nun aber zum WP-Cache 2!
    ===================

    Sobald man WP-Cache 2 installiert, muss man dieses WordPress gzip-compressing wieder abstellen, sonst funktioniert WP-Cache 2 überhaupt nicht. Daher habe ich es natürlich deaktiviert. ;)

    Nun stellte bei aktiviertem WP-Cache 2 aber das Plugin die Webseite ziemlich dämlich dar, nämlich komplett weiß ohne Inhalte. Bei einem Reload/Refresh oder sonstigen Versuch, die gleiche URL wieder zu laden, wurde eine gecachedte Version ausgespuckt, die auch schön im Plugin zu sehen war. Warum weiß ich nicht genau, aber zuerst eine weiße Seite zeigen, und dann bei einem zweiten Besuch der Seite den Inhalt auszugeben, fand ich ziemlich daneben.

    Daher dachte ich mir – wo ist der Fehler? Und ein Problem ist beim ob_end_clean() – sobald ich es mit dem ob_end_flush() ersetzte, funktionierte wenigstens die Auslieferung der Seiten.

    Nur damit wurde nichts mehr gecached. Nur noch eine dynamische Auslieferung erfolgte, kein Caching mehr. Irgendwo ist noch eine Timestamp zur Überprüfung der Halbwertszeit der zu cachenden Datei, doch die ist entweder bei der dynamischen Auslieferung auf „false“ gesetzt oder kaum angesteuert.

    Darüber hinaus ist die Funktion wp_cache_postload(), welche den Caching-Teil überhaupt ansteuert, nirgends direkt aufgerufen. Der String „wp_cache_postload“ ist auch nur in der Zeile „function wp_cache_postload()“ der wp-cache-phase1.php zu finden.

  6. Stefan Evertz sagte:

    Danke für den ausführlichen Kommentar. Es wundert mich nur, dass es bei dir hakt und drüben bei Robert offensichtlich beste Dienste leistet. Vielleicht solltet ihr mal eure Server-Konfigurationen abgleichen…

  7. Mike Schnoor sagte:

    Wir hatten deswegen schon einmal miteinander telefoniert… letzte Woche jedenfalls. Zur Not wechseln wir auf eine Statische Seite, die nicht von WordPress generiert wird. ;) Aber das muss erst noch kommen, dass wir hier so berühmt (oder berüchtigt) werden.

Kommentare sind deaktiviert.