(A Waste of) Words

  • Wird WordPress 3.5 ein Geschenk zum Nikolaus?

    Mit dem für heute geplanten Erscheinen des ersten Release Candidates RC1 von WordPress 3.5 tritt die Entwicklung der neuesten WordPress-Version in die heiße finale Phase.

    Bis zur Veröffentlichung der endgültigen Fassung liegen noch einige Hürden auf dem Weg der Entwickler, die Andrew Nacin in einem Beitrag auf Make WordPress zusammenfasst. Die wichtigsten Punkte daraus sind:

    • Die neuen Funktionen der Medienbibliothek bereiten Benutzern mit Internet Explorer 7/8/9 noch kleine Probleme. Die Unterstützung des veralteten IE 7 ist vielleicht zu aufwändig für die vollständige Umsetzung der neuen Medienverwaltung. Eine stark reduzierte Form ist als Workaround vorgesehen.
    • Der Betatest des neuen, verbesserten Importers für Tumblr-Blogs ist eröffnet. Gesucht werden Helfer, die hier Fehler suchen und melden. Der Importer meldet sich beim Tumblr-Blog über OAuth an und benötigt darum eine kleine, einfach einzurichtende App auf der Tumblr-Seite.
    • Wer beim Testen helfen möchte, soll sich eher auf die „exotischen“ Umgebungen konzentrieren: Mobiler Zugriff, diverse Versionen des Internet Explorer, Lokalisierungen mit der Schreibrichtung von rechts nach links.

    Der weitere Plan bis zum Erscheinen von WordPress 3.5 sieht so aus:

    • Das alte Standardtheme „TwentyTen“ aus WordPress 3.0 wird aus dem Download-Paket entfernt. Weiteren Support für bestehenden Installationen und Updates gibt es nur mehr über das WordPress-Themes-Verzeichnis.
    • Der erste Release Candidate RC1 erscheint heute
    • RC2 erscheint am 25. November 2012
    • RC3 erscheint spätestens am 3. Dezember 2012
    • WordPress 3.5 erscheint am 5. Dezember 2012, wenn keine gröberen Probleme bis dahin auftauchen

    #

  • Meine 12 Regeln für eine saubere Twitter-Timeline

    Twitter benutze ich schon seit Jahren, und mit der Zeit haben sich eine ganze Menge Leute in meiner Haupt-Timeline angesammelt, die dort wirklich nichts zu suchen haben.

    Ich folge denen aus Höflichkeit (du folgst mir, ich folge zurück), oder weil ihr Service/Produkt damals gerade angesagt waren, oder weil sie einmal was Lustiges/Schlaues/Dummes getwittert haben.

    Damit ist jetzt Schluss. Hier sind meine zwölf Kriterien für Twits, nach denen ich meine Timeline entrümpelt habe:

    1. Wenn wir seit mehr als zwei Jahren nicht mehr miteinander gesprochen haben und mich deine Tweets nicht brennend interessieren, bist du raus.
    2. Wenn du mir nicht antwortest und du nicht Top-Content machst oder findest, kommst du weg.
    3. Wenn dein Profilbild eine scharfe Braut ist, dein Vorname aber Michael: Leider, das war’s.
    4. Wenn du mit nackten Oberkörper auf deinem Profilbild posierst (und du bist ein Mann), passen wir nicht zueinander.
    5. Wenn du dich wegen deinem Gangsta-Slang (“Shice”, “shizzle”) selbst cool findest, haben wir ein Problem.
    6. Wenn dein Profilbild ein Ei ist, landest du im Abseits.
    7. Wenn du seit drei Monaten nichts getweetet hast und ich dich nicht persönlich kenne, dann passt’s nicht mehr zwischen uns.
    8. Wenn du ein animiertes GIF als Profilbild verwendest, kommst du weg.
    9. Wenn du wirklich blöde Sachen retweetest: Mach das bei wem anderen, aber nicht mit mir.
    10. Wenn du offensichtlich ein Bot bist, frag ich mich bloß: Was hab ich mir gedacht, als ich dir ursprünglich gefolgt bin?
    11. Wenn du jedem zurückfolgst, der dir folgt (so wie es ich früher gemacht habe und dabei in dieses Schlamassel geraten bin), bist du verbrannt.
    12. Wenn du dich auch noch mit einer DM fürs folgen bedankst und mich noch dazu auf deine anderen “social media Präsenzen” aufmerksam machst: Geh weg!

    #

  • So wird das deutsche WordPress ab Version 3.4 gravierend schneller

    Die deutsche Spracheinstellung kostet WordPress teilweise im Vergleich zur englischen Variante. Die Hauptursache ist die aufwendige und speicher-fressende Übersetzungsbibliothek, die WordPress bei jedem Seitenaufruf abarbeiten muss, um die originalen englischen Texte in ihr deutsches Gegenstück zu übersetzen.

    Dazu wird der Webserver durch eine träge in PHP geschriebene Nachahmung von Funktionen gequält, die in vielen Fällen bereits als schneller C-Code im Betriebssystem des Webservers vorhanden sind – die sogenannte gettext-Bibliothek.

    Langsames WordPress als Resultat von „günstigem“ Webspace

    Kann das deutsche WordPress auf diese „nativen“ C-Funktionen zurückgreifen, reduziert sich der Übersetzungs-Overhead auf schlanke vier Prozent. Gleichzeitig sinkt der Hauptspeicher-Verbrauch des Webservers, sodass als Konsequenz WordPress auch wieder auf billigeren Webhosting-Paketen mit etwas niedrigerem memory_limit laufen könnte. Es gibt ja immer noch günstige Webspace-Angebote, bei dem der Hoster dieses Speicherlimit für PHP auf asketische 32 MB gesetzt hat.

    Und beim Webspace-Anbieter liegt auch in Zukunft „der Hund begraben“: Die gettext-Erweiterung für PHP ist ein optionaler Bestandteil, den der Webhoster bereitstellen muss. Nicht auf jedem Webspace ist PHP mit dieser schnellen Extension eingerichtet, und in diesen Fällen wird sich an der Geschwindigkeit wahrscheinlich auch in Zukunft nichts ändern.

    Licht → Tunnel

    Für Nutzer aller anderen Webspace-Angebote ist Licht am Ende des Tunnels zu erkennen. Beim WordPress-Team ist ein Patch eingetrudelt, der die im Betriebssystem eingebauten schnellen gettext-Funktionen in WordPress integriert, und Andrew Nacin hat vorsichtig signalisiert, dass dieser Patch in die Version 3.4 eingearbeitet werden könnte.

    Leider zeigt WordPress nirgendwo im Dashboard an, ob die schnelle oder die langsame Variante der Übersetzungsbibliothek genutzt wird – die Auswahl erfolgt vollständig ohne Eingriffsmöglichkeit für den Anwender, indem die vorhandenen Fähigkeiten (oder eben auch Unfähigkeiten) des Webservers benutzt werden.

    Ein Diagnose-Plugin

    Ich habe darum das Plugin Native gettext diagnosis geschrieben, das sich als zusätzlicher Eintrag im Menü „Werkzeuge“ einnistet und eine Reihe von Tests durchführt.

    Ist die PHP-Erweiterung „gettext“ geladen und das Ergebnis des Tests „WordPress kann das locale setzen“ ein „Ja“, kann WordPress zumindest nach dem derzeitigen Stand der Entwicklung in Version 3.4 schneller werden.

    Das Plugin funktioniert auch ab WordPress 3.2 und kann daher schon jetzt benutzt werden, um festzustellen, ob der eigene Webspace mit WordPress 3.4 schneller oder langsam arbeiten wird.

    Mein Tipp: „Native gettext diagnosis“ installieren, den Menüpunkt „Werkzeuge → Gettext-Diagnose“ aufrufen und bei negativem Resultat entweder den eigenen Webhoster kontaktieren oder schlimmstenfalls den Webspace-Anbieter wechseln.

    Meine eigenen Tests zeigen, dass zum Beispiel Host Europe, Uberspace und Dreamhost die schnelle gettext-Extension anbieten, während auf Windows basierende Hoster da leider oft passen müssen.

    #

  • 21 nützliche Code-Schnippsel für functions.php

    Die Darstellung des Volltexteditors anpassen, Einbruchsversuche mit leicht erratbaren Benutzernamen und Passwörter erschweren, jQuery direkt aus den Google-Netzwerk laden lassen und vieles mehr kann man in WordPress über einige wenige Zeilen in der Datei functions.php des Themes steuern.

    Eine wachsende Sammlung solcher nützlicher Schnippsel stellt Merlin Mason zusammen mit einer einfachen Copy & Paste-Funktion auf wpfunction.me zur Verfügung.

    Gut abgelagerte WordPress-Veteranen werden wahrscheinlich den größten Teil schon kennen oder ein Plugin für den einen oder anderen Zweck aus dem Ärmel schütteln. Aber wer ohne großen Rechercheaufwand das Plugin-Arsenal auf seiner WordPress-Installation ein wenig abmagern möchte, sollte mal einen Blick auf die Sammlung werfen.

    #

  • 5 Wege, um sich in WordPress 3.4 anzumelden

    Welcher Webdesigner kennt nicht solche Fälle: Ein Kunde hat eine bestehende, etwas in die Jahre gekommen Website, die im Prinzip noch gut genug ist. Aber schön wär’s doch, wenn der Bereich mit den Neuigkeiten aus dem Unternehmen und den Pressemeldungen etwas einfacher zu verändern wäre und er nicht immer einen Dienstleister beauftragen müsste, um nur ein paar Absätze zu veröffentlichen.

    Also installiert man WordPress in einem Unterordner auf dem Webspace, baut ein passendes Theme und zeigt dem Kunden kurz, wie er sich anmelden und einen neuen Beitrag schreiben kann.

    Kaum ein paar Monate später möchte der dann schon seine zweite Meldung eingeben und meldet sich ganz verzweifelt: Weg ist er, der Zettel mit den Zugangsdaten, die Adresse zum Anmelden findet er nicht mehr in den Explorer-Favoriten, und probiert hat er auch schon alle möglichen URLs. Ob „WordPress.php“, „login“, „admin“, überall kommt nur eine Seite mit diesem hämischen

    Seite nicht gefunden. This is somewhat embarrassing, isn’t it? It seems we can’t find what you’re looking for.

    Das ist verständlich. Mit der Zeit gewöhnt man sich als Dienstleister sogar an, schon vorbeugend ein paar solcher Shortcuts direkt in der .htaccess anzulegen und seinen Kunden den Stress zu ersparen.

    WordPress 3.4 hilft bei Gedächtnisschwäche

    Mit WordPress 3.4 kommt eine kleine Verbesserung für Leute, die den Zugang zum WordPress-Dashboard vergessen haben: Für eine Reihe von „beliebten“ Rate-Versuchen leitet WordPress automatisch auf die korrekten URLs für Login und Dashboard um. Voraussetzung dafür ist, dass „schöne“ Permalinks verwendet werden.

    Hier ist die vollständige Liste von Pfaden, die WordPress 3.4 zur Anmeldung und zum Dashboard führen:

    Ich hatte vorgeschlagen, diese Liste noch um /wordpress und /WordPress zu erweitern, aber Andrew Nacin hielt das für doch zu verwirrend und ließ sich (leider) nicht überzeugen.

    #

  • Wie die WordPress Admin Bar als Datenkrake missbrauchbar ist

    TL;DR

    Über die mit WordPress 3.3 eingeführte erweiterte Admin Bar kann eine in den USA angesiedelte Firma E-Mail-Adressen von Nutzern der selbstgehosteten WordPress-Variante mit den Adressen der von ihnen bearbeiteten Blogs zusammenführen.

    Matt Mullenweg erfährt, was du gestern getan hast

    In der Version 3.3 hat WordPress die erweiterte Admin Bar erhalten, eine Kopfleiste im Dashboard zum schnellen Zugriff auf viele häufige Funktionen des WordPress-Administrationsbereichs. Diese Admin Bar ist bei jeder Aktion am oberen Seitenrand im Dashboard sichtbar.

    In der rechten Ecke zeigt die Admin Bar ein individuelles Avatar des angemeldeten Benutzers.

    Um diese Grafik anzeigen zu können, führt das Dashboard folgende Schritte durch:

    1. Die E-Mail-Adresse aus dem Profil des angemeldeten Benutzers wird an Gravatar.com1 übertragen.
    2. Der Browser übergibt bei dieser Gelegenheit auch die URL des Dashboards als Referrer an Gravatar.com.
    3. Gravatar.com verwendet die übertragene E-Mail-Adresse und sucht den zugehörigen Benutzer.
    4. Kennt Gravatar.com den Benutzer zu dieser E-Mailadresse, wird sein Avatarbild an den Browser des Benutzers zurückgeliefert.
    5. Ist die E-Mailadresse bei Gravatar.com unbekannt, wird ein neutrales Ersatzbild geliefert.
    6. In beiden Fällen erhält Gravatar.com die E-Mailadresse des Benutzers und die Adresse des Blogs.
    7. Nach Ablauf der Cache-Dauer von fünf Minuten wiederholt sich dieser Vorgang.

    Ich habe die relevanten Passagen in diesem Netzwerkprotokoll gelb markiert:

    Nach meinen Recherchen lässt sich die Informationsübertragung an Gravatar.com weder über eine Einstellung noch durch ein Plugin unterbinden, ohne die Gravatar-Funktionalität vollständig stillzulegen und damit zum Beispiel auch für die Anzeige der Kommentator-Avatare zu verlieren.

    Gravatar.com weiß klarerweise, welches Bild zu einer bestimmten E-Mail-Adresse gehört:

    Matt Mullenweg hält dich für uninteressant

    Ich glaube nicht, dass sich die WordPress-Entwickler bei Automattic diese Verbindungen bewusst gemacht oder gar mit Absicht eingebaut haben.

    Aber ich halte es für eine eklatante Lücke, dass die Datenübertragung an Gravatar.com praktisch fortlaufend während jeder Benutzersession im Dashboard passiert, während fast jedes andere Fitzelchen im Dashboard über Einstellungen, Plugins und Filter beeinflussbar ist.

    Eine Offenlegung dieses Verhaltens habe ich weder in der Privacy Policy von Automattic noch bei der rein nominell ja von Automattic Inc. unabhängigen2 WordPress Foundation finden können.

    Noch ein Grund für „German Internet Angst“

    Deutsche Datenschützern beginnen ja schon wegen der Übertragung von IP-Adressen an ausländische Unternehmen zu hyperventilieren. Ich wäre gespannt auf deren Reaktion, wenn die wüssten, dass eine kleine Firma in San Francisco mit über den ganzen Globus verteilten Mitarbeitern Zugang zu den E-Mail-Adressen der Betreiber eines großen Teils der deutschen Websites hat.

    Gegenmaßnahmen

    Am schönsten wäre es aus meiner Sicht, wenn die Darstellung des Gravatars im Dashboard über einen Filter oder eine Einstellung unterbindbar wäre. Der Unterhaltungswert des Bildchens für den Benutzer ist ohnehin gering, und ein paar hundert Millisekunden für den doppelten Roundtrip zu Gravatar.com würden auch noch eingespart.

    Eine Ausweichlösung wäre die Verwendung des verschlüsselten Protokolls HTTPS für den Zugriff auf das Dashboard. Dann würde die URL des Dashboards nicht mehr via Referer an Gravatar.com übertragen.

    Und schlussendlich lässt sich das Problem auch noch mit der Holzhammermethode erledigen: Admin Bar komplett ausschalten.

    1 Gravatar.com ist ein Dienst der Automattic Inc.

    2 Wer die Trennschicht zwischen Automattic (gewinnorientiertes Startup, Arbeitgeber diverser WordPress-Entwickler) und der WordPress Foundation (karitativer Verein zur Förderung demokratischen Publizierens via GPL-Software und Inhaber der Rechte an der Marke „WordPress“) durchschaut, darf mich bitte in den Kommentaren erleuchten.

    #

  • Warum die deutsche Sprachdatei WordPress um 44 Prozent langsamer macht

    Jeder deutschsprachige WordPress-Anwender kennt vermutlich diese kurze PHP-Zeile:

    define ('WPLANG', 'de_DE');

    Mit dieser einen Zeile wird WordPress deutschsprachig – und jeder Seitenaufruf rund 44 Prozent langsamer.

    Im Folgenden zeige ich, warum dieser Performance-Einbruch eintritt und welche Möglichkeiten existieren, dem entgegenzuwirken.

    Warum kann WordPress Deutsch?

    WordPress verwendet im gesamten Code englische Originaltexte. Zur Lokalisierung der Software in anderen Sprachen muss WordPress Übersetzungen aus zusätzlichen Dateien im verbreiteten PO-Format einlesen. Die deutschsprachige Lokalisierung von WordPress 3.1.x enthält fast 3.200 Textschnippsel für den WordPress-Kern und 87 Übersetzungen für das Theme „TwentyTen“. Je nach Konfiguration kommen dann noch lokalisierte Texte der aktiven Plugins dazu.

    Was kostet Zeit?

    Ziemlich früh bei jedem Request wird innerhalb von wp-settings.php die Funktion load_default_textdomain() aufgerufen.

    Über ein paar weitere Aufrufebenen erreicht WordPress dann import_from_reader(), die tausende kurzer Textschnippsel aus der Sprachdatei des WP-Cores einliest. Wenig später ruft das Theme „TwentyTen“ über den Wrapper load_theme_textdomain() ein zweites Mal import_from_reader() auf, um die Übersetzungen der Theme-Texte zu laden.

    Die lokalisierten Texte werden für jeden Aufruf der öffentlichen Website, bei jeder Aktion im Backend, bei jedem AJAX-Request und bei der Generierung der XML-Feeds geladen. load_default_textdomain() verbraucht nach meinen Messungen etwa 30 bis über 50 Prozent der gesamten Zeit, die für die Bearbeitung eines Requests nötig ist.

    Zusammengefasst heißt das: Ein deutschsprachiges Blog ist für menschliche Besucher, Googlebot und Administratoren wesentlich langsamer als das exakt gleiche Blog auf einem englischen WordPress.

    Messmethode

    Zur Auswertung der Laufzeit-Unterschiede zwischen der deutsch- und der englischsprachigen Variante habe ich eine lokale WordPress-Installation mit Xdebug vermessen und die so gewonnenen Profiling-Daten für folgende drei Requestrouten mit webgrind visualisiert:

    1. Darstellung von zehn einfachen Posts auf der Blog-Homepage mit dem Standardtheme „TwentyTen“
    2. Aufruf der Dashboard-Übersicht im Backend
    3. Darstellung des RSS-Feeds

    Der Testaufbau bestand aus:

    • WordPress 3.2-bleeding r17633
    • Theme „TwentyTen“ 1.1
    • Keine aktiven Plugins
    • Lokaler Webserver ohne Last
    • Apache 2.2.9
    • PHP 5.2.6
    • MySQL 5.0.67
    • Xdebug 2.1.1
    • webgrind 1.1
    • Windows 7 SP1

    Messergebnisse

    Die Zeit, die WordPress benötigt, um einen einzelnen Request zu erfüllen, variiert je nach Route (Frontend, Backend, RSS). In jedem Fall verschlechtert der Wechsel auf die deutsche Sprachdatei die Geschwindigkeit um zweistellige Prozentsätze.

    Für die Darstellung der Frontpage mit zehn Blogbeiträgen benötigt die deutsche Fassung fast doppelt so lange wie das englische Pendant, das Backend wird um etwa ein Drittel gebremst und die RSS-Feeds werden über 60% langsamer erzeugt.

    Der Webgrind-Report liefert die Laufzeiten jeder einzelnen Funktion, die WordPress zur Generierung der Frontpage aufruft. Sehr schön sieht man hier, dass MO->make_entry() für jedes einzelne Textschnippsel ein Mal aufgerufen wird. 3.273 übersetzte Texte werden in 618 ms geladen.

    Man erkennt deutlich, dass gerade die Lokalisierungsfunktionen aus der POMO-Bibliothek den Löwenanteil der Zeit verbrauchen.

    Mit MO->import_from_reader, MO->make_entry, Translation_Entry->key und POMO_REader->substr sind vier der fünf zeitaufwändigsten Funktionen bei jedem Seitenaufruf für die deutsche Übersetzung nötig. Es gilt ein annähernd linearer Zusammenhang: Je mehr übersetzte Texte, desto höher der Zeitbedarf.

    Der selbe Ablauf in der englischsprachigen Variante sieht zum Vergleich so aus:

    Ein ähnliches Verhältnis ergibt sich auch für das Backend1 und Feeds2.

    Die Messung eines Profiling-Durchlaufs auf meinem Testsystem ergab diese in weiteren Durchläufen recht gut reproduzierbaren Laufzeiten:

    Route Laufzeit [en] Laufzeit [de] Relative Leistung [de]
    Frontend 2343 ms 4327 ms 56%
    Backend 3003 ms 4283 ms 70%
    RSS-Feed 1129 ms 2952 ms 38%

    Diese Zahlen sollte man auf jeden Fall mit ein wenig kritischer Distanz werten: Ich habe Messungen auf einem einzigen System durchgeführt und auf einem zweiten Rechner auf Plausibilität geprüft. Ergebnisse mit Webspace auf anderen Betriebssystemen oder Dateisystemen können abweichen, und ich würde sehr gerne Zahlen von Apple- oder Linux-Systemen zum Vergleich sehen. Trotzdem glaube ich, dass das Lokalisierungspackage in WordPress einen merklichen Anteil an der Performance einer WordPress-Site hat.

    In der grafischen Darstellung wird deutlich, wie eklatant der Leistungseinbruch der deutschen Fassung ausfällt:

    Verbesserungspotential

    Was kann man tun, um diesen Klotz am Bein los zu werden? Leider habe ich dazu keine ideale Lösung, sondern nur ein paar Denkansätze:

    Ein Frontend-Cache ist immer nützlich und hilft auch hier. Die negativen Auswirkungen der Lokalisierung im Backend lindert ein Cache aber nicht.

    Eine weitere Möglichkeit wäre, auf die deutsche Sprachdatei komplett zu verzichten. Im Backend findet man sich eventuell auch auf Englisch zurecht, und für das Frontend setzt man einfach ein Theme ein, dass auch ohne Lokalisierung Deutsch spricht.

    Drittens könne man einen Vorteil aus der Tatsache ziehen, dass der Leistungseinbruch mit der Zahl der übersetzten Texte zusammenhängt, und eine auf das Wesentliche verkürzte deutsche Sprachdatei einsetzen. Ein radikaler Löschkreuzzug in der Sprachdatei, dem ein paar hundert Hilfetexte oder unbenutzte Texte für WP-Multisite zum Opfer fallen, ist mit Hilfe von Poedit . Die Ladezeit sinkt mit jedem entfernten Eintrag in der Sprachdatei um etwa 0,3 Promille.

    Weitere Verbesserungen erfordern, dass seitens der WordPress-Programmierer an der Optimierung der POMO-Bibliothek selbst gearbeitet wird und zum Beispiel persistente Caches für die translation entries genutzt werden. Das Trac-Ticket dafür gibt es schon

    Fußnoten

    1 Profilingdaten für das Backend in und .

    2 Profilingdaten für den RSS-Feed in und .

    #

  • WordPress beschleunigen - mit nur einem Klick

    Weil’s in diesem Beitrag um Geschwindigkeit geht, gibt’s gleich vorweg die Kernaussage für alle Eiligen:

    Wenn du dein Blog mit einer Version von WordPress vor 3.0 aufgesetzt hast und „schöne“ Permalinks verwendest, speichere jetzt die Permalink-Einstellungen noch einmal. Dein Blog wird dadurch schneller – sonst ändert sich nichts.

    Und nun das Ganze noch mal langsam zum Mitlesen1

    Um schöne Permalinks nach dem Muster http://www.example.com/2010/12/hello-world an Stelle der „hässlichen“ Variante http://www.example.com/?p=123 erzeugen zu können, benötigt WordPress das Apache-Modul mod_rewrite und einige Zeilen in der Datei .htaccess, die im Wurzelverzeichnis des Blogs am Webspace liegt. In diesen Zeilen definiert WordPress, wie der Webhost auf Anfragen nach diesen „schönen“ Permalinks reagieren soll.

    Das macht WordPress schon seit Urzeiten so. Aber erst am 9. Januar 2010 wurde bekannt, dass die bisher benutzen Regeln für mod_rewrite den Webserver dazu angeleitet hatten, diese Regeln häufig zwei Mal für jeden Seitenaufruf durchzuackern – mit der damit einhergehenden Geschwindigkeitseinbusse für jeden Besucher. Diese Scharte wurde am 11. März 2010 ausgewetzt und mit dem Release von WordPress 3.0 im allgemein genutzten Produkt beseitigt.

    Bessere RewriteRules ab WordPress 3.0

    Ab Version 3.0 schreibt WordPress also bessere Rewrite-Regeln in die .htaccess – aber nur auf Aufforderung: Beim automatischen Update werden zwar alle Programmdateien aktualisiert und auch Datenbankstrukturen angepasst, aber etwaige Verbesserungen in der Konfiguration des Webservers bleiben aus Stabilitätsgründen außen vor.

    So sieht der Block mit Rewrite-Regeln in .htaccess auf einer Installation von WordPress vor Version 3.0 häufig aus:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    Erst mit dem Klick auf „Speichern“ in den Permalink-Einstellungen werden die Rewrite-Regeln aktualisiert und um die eine Zeile ergänzt, die den zweiten Durchlauf durch das Regelwerk verhindert:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    Schnellere Seiten, zufriedene Besucher

    Diese eine zusätzliche Zeile erhöht im Fall von Hosting auf einem günstigen Webspace die Geschwindigkeit, mit der Seiten an die Besucher und auch an Google ausgeliefert werden, um etwa 10 bis 20 Prozent. Das ist zwar nicht atemberaubend, aber sowas von „geschenkter Gaul“ wie nur irgend möglich.

    Wie schaut die Situation bei dir aus?

    1 …für die G’studierten ;)

    #

  • Multi-Sites in WordPress 3.0: Wie viele laufen auf einem Server?

    Das früher separat entwickelte WordPress MU wandert als neues Multi-Site-Feature in WordPress 3.0 und kann dort mit einer einzigen Zeile in der Datei wp-config.php eingeschaltet werden:

    define ('WP_ALLOW_MULTISITE', true);
    

    Mit einer einzigen Installation von WordPress können auf dem Webserver somit theoretisch unbegrenzt viele Blogs betrieben werden.

    Theoretisch, wie gesagt. In des Praxis wird vor allem die Kapazität des Datenbankservers eine erste Grenze setzen, ab der die Geschwindigkeit einbricht. Zur Verteilung dieser Last auf mehrere MySQL-Server verwendet WordPress.com die Datenbankklasse HyperDB. HyperDB ist als Open-Source-Projekt frei verfügbar.

    Von Andy Skelton kommen ein paar grobe Richtwerte, wie er die Auslegung der Server bei WordPress.com handhabt:

    Wir haben 100 Millionen Blogs auf hundert Master-Server verteilt, von denen jeder tausend Datenbanken hält. Demnach sind tausend Blogs in einer Datenbank.

    Ist das Problem mit dem Flaschenhals Datenbank aus der Welt, steht die Rechenleistung des Webservers als nächstes Hindernis vor dem eigenen Blogimperium. Richtwerte dazu sind erst dann seriös ermittelbar, wenn die verwendeten Plugins und Themes, Caching und die Methoden zur Trennung zwischen statischen Inhalten (Stylesheets, Mediendateien) und dynamischen Scripts festgelegt sind.

    #

  • WordPress 3.0 in einer schwierigen Entwicklungsphase

    Die sehr ambitionierten Entwicklungsziele für WordPress 3.0 werfen größere Schwierigkeiten für die Entwickler auf als in der ursprünglichen Projektplanung angenommen wurde. Ein Veröffentlichung von WordPress 3.0 am 1. Mai, wie ursprünglich vorgesehen, wäre nach dem letzten Entwicklerchat bestenfalls nur mit Abstrichen bei den gewohnten Funktionen möglich.

    WordPress 3.0 ist als großer Schritt geplant – mit den custom post types, der Integration des Codes von WordPress µ als Multisite-Funktion und der Navigation aus den Woo Themes für die im Core integrierte Menüverwaltung sind drei arbeitsintensive und damit bug-trächtige Brocken neu dazu gekommen.

    Die derzeitige Implementierung der Menüfunktionen leidet zudem an einem nur noch als extrem zu bezeichnenden Leistungshunger. Theme-Entwickler haben andererseits kaum eine Chance, das neue Menüsystem zu ignorieren, wenn sie ihre User nicht vergraulen wollen.

    Jane Wells‘ kritische Zusammenfassung des Developer Chats nennt zwei Alternativen: Entweder werden die Menüfunktionen wieder aus dem Core entfernt und erst in die Entwicklung von WordPress 3.1 eingeplant, oder das Erscheinen von WordPress 3.0 verschiebt sich um eine noch nicht genau festlegbare, aber jedenfalls recht beträchtliche zusätzliche Entwicklungsphase. Am 1. Mai wird wegen der Fülle an währed des Beta-Tests aufgetauchten Bugs wahrscheinlich nur der erste release candidate WordPress 3.0 RC1 erscheinen.

    #