Sebbis Blog

Kategorie: Wordpress

Wordpress stuff

  • Kleinvieh macht auch Mist

    In einer Vorlesung haben wir gelernt, dass 20% aller Aufrufe in Programmen Sprünge sind und die Top10 der Aufrufe zusammen 96% aller aufgerufenen Befehle ausmachen. Das kann man auch für PHP/Wordpress mittels APD herausfinden (auf einem höheren Level). Sortiert nach der Anzahl der Aufrufe sieht man, dass eben auch Kleinvieh Mist macht. Ich frage mich, ob man da nicht massiv optimieren kann. So oft wie strlen und mysql_fetch_object aufgerufen werden, dass kann nicht normal sein.

    Hier die Aufrufe nach Anzahl der Calls sortiert:

             Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
     15.1  0.16  0.16   0.13  0.13   0.01  0.01  4414   0.0000    0.0000            0 mysql_fetch_object
     12.6  0.11  0.11   0.11  0.11   0.01  0.01  4123   0.0000    0.0000            0 strlen
      6.7  0.07  0.07   0.06  0.06   0.00  0.00  2002   0.0000    0.0000            0 substr
      7.2  0.07  0.07   0.07  0.07   0.00  0.00  1711   0.0000    0.0000            0 preg_replace
      2.0  0.02  0.11   0.02  0.09   0.00  0.00  1674   0.0000    0.0000            0 cachedfilereader::read
      3.0  0.02  0.09   0.03  0.09   0.00  0.00  1664   0.0000    0.0000            0 cachedfilereader::seekto
      4.7  0.04  0.04   0.04  0.04   0.01  0.01  1084   0.0000    0.0000            0 str_replace
      1.3  0.01  0.01   0.01  0.01   0.00  0.00   670   0.0000    0.0000            0 array_slice
      3.0  0.03  0.03   0.03  0.03   0.00  0.00   670   0.0000    0.0000            0 func_get_args
      1.9  0.02  0.02   0.02  0.02   0.00  0.00   670   0.0000    0.0000            0 merge_filters
      1.1  0.01  0.18   0.01  0.16   0.00  0.01   663   0.0000    0.0000            0 apply_filters
      1.6  0.02  0.02   0.02  0.02   0.00  0.00   624   0.0000    0.0000            0 mysql_num_fields
      3.2  0.02  0.02   0.03  0.03   0.00  0.00   575   0.0000    0.0000            0 mysql_fetch_field
      2.4  0.01  0.01   0.02  0.02   0.00  0.00   534   0.0000    0.0000            0 date
      3.8  0.04  0.04   0.03  0.03   0.00  0.00   533   0.0000    0.0000            0 strstr
      1.1  0.01  0.01   0.01  0.01   0.00  0.00   315   0.0000    0.0000            0 defined
      0.2  0.00  0.10   0.00  0.09   0.00  0.00   303   0.0000    0.0000            0 get_settings
      0.7  0.01  0.01   0.01  0.01   0.00  0.00   286   0.0000    0.0000            0 is_array
      0.2  0.00  0.02   0.00  0.01   0.00  0.00   212   0.0000    0.0000            0 smiliescmp
      0.0  0.00  0.01   0.00  0.01   0.00  0.00   160   0.0000    0.0000            0 backslashit
    

    Noch beeindruckender, die Top20 beim Schreiben eines Artikels:
    (mehr …)

  • Spam Karma 2 Akismet Plugin BETA

    BIG BIG UPDATE:
    This plugin is no longer BETA! The location of the zip containing the plugin did not change so just redownload it if you’ve downloaded it before January 31st. Have fun!

    If you are a wordpress blogger you probably know about Akismet, the new spam stop solution that Matt Mullenweg announced last week. It’s his try to prevent spam from ever appearing on all those wordpress blogs on this planet. WordPress.com already uses it and you can download it on akismet.com as a plugin for WordPress 1.5.2. All you need is a WordPress.com API key and for that you need a WordPress.com account and for that you need to download Flock (brrr, you know Flock sucks, but it gives you an API key … hurray!) and go to wordpress.com/flock with Flock and sign up. The API key is then located in the profile of your WordPress.com account. So this is a fairly complex way to get and use this super simple plugin of theirs.

    Akismet works by sending all new comments to their servers and replying with „true“ or „false“ if the service thinks it’s spam or not. You can also manually mark comments as spam and recover spam comments (false positives) that are real comments. Both improves Akismet by reporting back the mistake.

    While this is a nice approach I don’t like the idea of having only one service to check a comment against. I recently switched to Spam Karma 2 and am very happy with it. It never failed me and successfully sent nearly 900 comments to hell in the last 18 days. But nobody is perfect and checking against Akismet could make Spam Karma 2 even better.

    Enter Spam Karma 2 Akismet Plugin :-) (beta test), an additional filter for my favourite spam prevention system (which also lists detected spam in a more readable way).

    You can download the BETA (!!!) here: sk2_akismet_plugin.zip

    Advanced Settings
    Unzip it to your sk2_plugins directory and enter the above mentioned WordPress.com API key in the „General Settings“ of this plugin plugin (a plugin in a plugin, sic!). You can finetune (set some boundaries) the plugin in the advanced settings, but the default values should work fine. Nevertheless I’d like feedback on that, too. And on everything else.

    The plugin automatically submits detected spam and ham that Akismet got wrong back to Akismet.com which should make the service better with time (it already detects a lot of spam … 80% of all comments are spam they say … but more can’t hurt, right?).

    Update:
    – Changed some things in the text of this announcement.
    – The plugin no longer submits all comments as spam/ham, only the ones where Akismet was wrong.
    – Still BETA

    Second Update:
    – Uploaded a new version which fixes a bug mentioned by Matt in the comments
    – Changed the picture to reflect the current version
    – Still BETA though ;-)

  • Spam Karma 2

    Wie mir dieses Plugin entgehen konnte, ich weiß es nicht. Aber es leistet göttliches beim unauffälligen Entfernen von Spam (Kommentare als auch Trackbacks, leider kein Refererspam).

    There have been 26 comment spams caught since the last digest report 1 day ago.

    Sehr viele Spams werden bei mir nur durch Einträge in irgendwelchen RBLs herausgefiltert. Das war mit den seltsamen „ich find dein Blog so toll“-Spams der letzten Wochen unmöglich. Eigentlich sahen die in Ordnung aus, nur eben völlig wahllos verteilt und in der falschen Sprache. Das ist jetzt Geschichte. Das Plugin rockt und Spam hat scheinbar keine Chance mehr mich zu nerven (noch ist nichts davon in der Moderation gelandet, alles sofort als Spam erkannt). Fazit: Wer ein WordPressblog hat, sollte unbedingt dieses Plugin haben ;-)

    Danke an „Stanley“ für den Tipp!

    P.S.: Falls mal alle Stricke reißen verhindert das Plugin keinesfalls einen Kommentar eines Menschen, denn zur Not fragt es nach dem Absenden noch mal ob man eine Zeichenfolge erkennen kann (Captcha). Perfekt!

  • Nofollow

    Nur weil ich es gerade bemerkt habe … dieses Plugin, das ich bisher verwendet habe um das Attribut „rel“ mit dem Wert „nofollow“ aus den Links von Kommentatoren (WordPress Standardeinstellung) zu tilgen funktioniert nicht wirklich. Bei manchen Links stand das immer noch da. Deshalb habe ich es durch dieses Plugin ersetzt. Alle eure Links zählen jetzt wieder was falls sie es vorher nicht eh schon getan haben. Jippie!

    Wayne interessiert’s …

  • Gallery2

    Nachdem vor ein paar Tagen der Release Candidate 2 von Gallery2 herausgekommen ist, habe ich mal auf diese Version aktualisiert. Die alten URLs werden wohl nicht mehr funktionieren, aber dafür ist es jetzt recht hübsch ins Blog integriert.

    Test (Album einbinden):
    Kastenlaufen2005undBerg/

    P.S.: Ja ich weiß, dass eine Fotogalerie ohne Fotos langweilig ist ;-)

  • NoNofollow

    WordPress NoNofollow Plugin

    Hab ganz vergessen das wieder zu aktivieren. Das alte Plugin war ein selbst zusammengeschustertes. Das oben verlinkte hat zusätzlich eine Option „nofollow“ erst nach X Tagen zu entfernen. Auf einen Tag eingestellt gibt es einem die Möglichkeit eventuell durchgeschlüpften Spam noch zu löschen bevor er wirken kann. Perfekt!

    P.S.: Alle die nicht wissen was das bedeutet mögen das hier bitte ignorieren oder einen spaßigen Kommentar dazu schreiben über den ich mich freuen kann ;-)

  • WordPress 1.5.3 Update

    Falls es jemand wie ich verpasst hat. Vor ein paar Tagen gab es ein Update von WordPress. Scheinbar sehr unauffällig, denn ich hab es nicht mitbekommen. Es stopft ein Loch im XMLRPC-Interface (geeky!) und ich habe so eben darauf aktualisiert. Wenn euch irgendwelche Bugs auffallen, dann wüsste ich gerne bescheid.

    Danke

    P.S.: Haben wir gerade eine Art Sommerloch, das sich mit Wasser aus Regenwolken füllt?

  • Dies ist ein Test

    Mal sehen, ob man tatsächlich mit einem Blogtool Beiträge über das XMLRPC-Interface schreiben kann :-)

    Nachtrag: Scheint zu funktionieren (mit w.bloggar)

    Nachtrag 2: Man kann sogar mit einem anderen Tool (Ecto) den Eintrag nochmal überarbeiten … schick ;-)

  • WordPress SEO Zwischenfall

    Schon komisch. Da fährt der „Chef“ von WordPress.org, Matt Mullenweg, für eine Woche in der Weltgeschichte herum und genau in dem Moment wird entdeckt, dass auf WordPress.org tausende von Werbeseiten liegen um Suchergebnisse für bestimmte Wörter zu verändern bzw. auf bestimmte Seiten zu lenken. Und das offensichtlich für Geld.

    Nun regt sich also die ganze Welt (Bloggerwelt) darüber auf, dass jemand, der sich für den Kampf gegen Spam einsetzt (nofollow Links), selbst spamt (die genannten Dummyartikel).

    Mehr darüber hier, hier, hier und hier.

    Matt Mullenwegs erster Kommentar dazu: hier

    Und so sah es etwa aus:
    Wordpress Spam

    Spannend … auch wenn hier wohl gilt „sie waren jung und brauchten das Geld“ oder so … ein Spendenaufruf hätte es aber vielleicht auch getan?

  • Schnelleres PHP (und auch WordPress)

    Angeregt durch die Schlammschlacht auf Plasmas Blog, habe ich die letzte Stunde damit verbracht WordPress bzw. unsere PHP-Installation allgemein ein bisschen zu beschleunigen.

    Ergebnis: Statt über einer ganzen Sekunde braucht eine Seite im Durchschnitt nur noch 200 Millisekunden bis sie angezeigt wird (auf einem AMD Duron 1300 MHz mit 512 MB RAM, Apache 2.x, PHP 4.3.x, MySQL 4.x unter Linux mit einem 2.4-er Kernel). Und das – wohl gemerkt – ohne die Benutzung eines Caches, der die Ausgaben von WordPress zwischenspeichert (wie es z.B. das mitgelieferte Staticize Plugin macht)

    MySQL

    WordPress baut alle Seiten dynamisch aus einer Datenbank auf. Von daher liegt es nahe hier zuerst anzusetzen. MySQL hat ab Version 4.0.1 einen Querycache eingebaut, der nicht aktiviert war. Um ihn zu aktivieren einfach folgendes in die Datei /etc/my.cnf in die Sektion „mysqld“ eintragen:

    [mysqld]

    query_cache_limit = 2M
    query_cache_type = 1
    query_cache_size = 32M

    Das und ein Neustart der Datenbank bewirken, dass Anfragen die ein Ergebnis haben, das kleiner als 2 MB groß ist, in einem Cache von 32 MB gespeichert werden.

    Das wirkte schon mal Wunder. Um die Zeit weiter zu drücken, sollte man in den WordPress Optionen einstellen, dass eine bestimmte Anzahl von Artikeln angezeigt werden soll und nicht ein Zeitraum. Das senkte die Zeit die die Abfragen benötigten von ca. 300 ms auf nun ca. 30 ms. Da der Löwenanteil der Zeit aber offensichtlich wo anders verbraten wird wurde, muss noch mehr optimiert werden.

    PHP

    Wenn nur ein Drittel der Zeit für die Datenbank abfragen draufgehen, dann scheint wohl PHP den Rest zu verschlingen. Also habe ich erstmal den Zend Optimizer installiert. Dieser soll den Code optimieren und so für eine schnellere Ausführzeit sorgen. Tat er auch, aber das war mir nicht genug.

    WordPress besteht aus einigen 100 KB PHP-Code. Nicht alles wird bei jedem Seitenaufruf geladen, aber es ist doch eine beträchtliche Menge, die da jedes mal interpretiert/kompiliert wird. Auf meiner Suche nach weiteren Verbesserungen bin ich dann beim Turck MMCache hängengeblieben. Damit läuft die Ausführung von PHP-skripten ähnlich ab wie etwa bei JSP. Der Code wird beim ersten Ausführen (nach einer Änderung an der Datei) einmal kompiliert und danach nur noch das Kompilat, welches im RAM liegt, ausgeführt. Das hat die Zeit dann fast halbiert. Prima!

    Doch WordPress nahm sich immer noch fast 400 ms an Zeit :-(

    WordPress

    Oben habe ich ja bereits auf eine Einstellungsmöglichkeit hingewiesen um die Datenbank etwas weniger zu belasten. Hier nun ein weiterer Tipp.

    WordPress ist ziemlich langsam, wenn man eine andere Sprache als den Standard (Englisch) einstellt. Zum Test habe ich die entsprechende Zeile aus der Datei wp-config.php entfernt und siehe da, es lief doch deutlich schneller.

    Im WordPress Supportforum habe ich dann auch schnell eine Lösung dafür gefunden. Scheinbar wird in der Version 1.5 eine ältere Version von PHP gettext verwendet. Folgt man der Anleitung aus dem Forum (neue Version drüber installieren und eine Änderung an wp-includes\wp-l10n.php) wird WordPress auch in Deutscher Sprache schneller. Besagte 200 ms waren erreicht :-)

    Fazit

    Durch einige wenige Ein- und Umstellungen kann man eine PHP-Anwendung – und diesem Fall alle auf diesem Server laufende – deutlich beschleunigen, ohne dass man darauf achten muss, was die Anwendungen speziell so machen.

    P.S.: Am Ende hat mich doch interessiert wieviel das oben genannte Staticize Plugin noch herausholen kann. Nach Aktivierung wurden die Seiten in ungefähr 30-150 ms ausgeliefert (siehe HTML-Kommentar am Ende des Quelltextes). Damit kann man ruhig auch mal auf Slashdot.org verlinkt werden ohne dass der Server in die Knie geht :twisted:

    Update:
    Mit Staticize Reloaded konnte man leider keine Kommentare mehr zu einem Artikel hinzufügen, da der verwendete Spamfilter (WP-Hashcash) nicht damit kompatibel ist. Auf der Homepage des Plugins steht zwar eine Anleitung wie man es trotzdem anstellen kann, dass beides miteinander funktioniert, aber die funktioniert nicht. Vorerst ist also der zusätzliche Spamschutz ausgeschaltet. Mal sehen wie sich WordPress ohne macht :-)