Sonstiges

WordPress Plugin: Get Recent Comments

Get Recent Comments gehört mE mit zu den besten Kommentarplugins im WordPressbereich. Es wartet nebst der visuellen Trennung von Trackbacks und Kommentaren mit einer vorzüglichen Bedienoberfläche für den Admin auf.

Wie jedoch am Wochenende in den zahlreichen WordPress-Artikeln zur Problemzone Plugin-Perfomance beschrieben, gehören gerade Kommentarplugins zu potenziellen Ressourcenfressern. Dabei kommt es nicht nur auf die Anzahl der Queries (Anzahl der sich wiederholenden Datenbankabfragen) an, sondern auch auf die Anzahl der zu durchsuchenden Datensätze. Es ist also gänzlich etwas anderes, wenn man sich die letzten X Kommentare anzeigen lässt und dabei 100 oder aber 100.000 Datensätze durchforsten muss.

So ein Kommentator (king of Fool) beim Plugin Developer zum o.g. Tool:

The plugin works great but keep in mind that the mysql query is extremely inefficient. If you only have a few hundred comments, you might not notice any issues – however I just spent a few hours debugging a site that has over 50,000 comments. It turns out the plugin query was processing 145,000 db rows just to get the last 5 comments, plus it was filesorting them for an added performance hit.

How we solved it:
1. We added an index by comment_date to the wp_comments table. This immediately eliminated the filesort.
2. „€œWHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) < = comment_date AND"€¦"€? to the plugin query (in two places). Now instead of reading 145,000 rows, it reads 415.

Habe diese Anpassungen entsprechend vorgenommen (DB vorher gesichert 😉 und unter Dialoge, wo das Plugin läuft, habe ich nach einigen Minitests feststellen können, daß in der Tat der Seitenaufbau regelmäßig um 0.5-1 Sekunde schneller läuft.

Ü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.

13 Kommentare

  • Wie man WordPress Weblogs tiefer legt & richtig tuned

    »Geschwindigkeit ist (keine) Hexerei.« Sprach Robert und legte sich wie einige andere WordPress Blogger unter sein Weblog und fing an zu schrauben. Und so lernen wir, wie auch WordPress Weblog tiefer zu legen sind. Breits in Wie bringe ich …

  • Tweak your WordPress – Teil II – Liegt es wirklich am Template ?

    Im ersten Teil habe ich mich um die Sidebar gekümmert. Einen kleinen Erfolg habe ich erzielt, aber insgesamt bin ich nicht viel weiter gekommen. Ich bin immer noch weit über 1000 Abfragen auf der Hauptseite. Ohne Plugins sind es 410. Auf mei…

  • angesichts der schönen rege über allerlei blogs verteilten konstruktiven diskussion ums wp-optimieren darf mein senf hier natürlich nicht fehlen 😉

    ich nutz recent comments ja ebenfalls, aber so weit ich das hier sehe, anhand deiner optimierungsmaßnahme, ist der db-abfrage-mechanismus des plugins ein ziemlicher murks.

    lassen wir mal die sonderfälle „eigene kommentare“ und „eigene trackbacks“ außen vor, müßte z.B. der select für die neuesten 5 kommentare sinnbildlich so aussehen:

    SELECT FROM WHERE =“ ORDER BY DESC LIMIT 5

    nicht mehr und nicht weniger – exakt ein query, exakt 5 gelesene werte, fisch gegessen. selbst wenn man zusätzliche infos zum jeweiligen artikel benötigt, ist das durch reines einJOINen abgefackelt. wenn der umfang hingegen mit der anzahl der datensätze in artikel- und kommentar-tabelle mitskaliert, dann ist hier von der grundsätzlichen architektur des plugins schon etwas gewaltig faul.

    ich sehe schon, da kommt noch viel arbeit auf die blogosphäre (und speziell den teil der programmiererfahrenen davon) zu….

  • mift…. ich seh grad, roberts formulareingabe-aufräum-routine hat meine pseudotags, mit denen ich den SELECT gespickt hatte, wegrationalisiert ;(
    robert, stehen die daten wenigstens korrekt in der datenbank? sonst schreib ich den select nochmals in anderer form sauber auf, wie er optimal lauten müßte.

  • hi robert, ich habe zwischenzeitig nen tiefen blick in die quellen genossen und gesehen, daß das statement für trackbacks und comments im grunde genommen schon das ist, was ich oben eigentlich vereinfacht hinschreiben wollte. statt der mammut-joins, die das plugin verwendet, würde ich zwar „zu fuss“ vorgehen, da das unter mysql deutlich performanter ist, aber das ist eine andere sache. die JOINs sind jedenfalls dafür verantwortlich, warum das ganze bei einer großen datenbank so extrem groß wird. daher sehe ich da gewaltiges optimierungspotential, indem man die JOINs auflöst und stattdessen drei separate queries absetzt – einen gegen die comments, einen gegen die trackbacks, und einen gegen die artikel, um die zu den gefundenen zehn datensätzen gehörigen artikeldaten zu holen (was ja außer titel und permalink praktisch keine informationen wären). damit wäre recent comments egal wie groß die datenbank würde, IMMER im millisekundenbereich fertig.

  • WP – Performance meiner Startseite

    Durch den Artikel von Robert inspiriert, habe mich auf die Suche nach Plugins begeben, die die Datenbankabfrage nach oben drücken. Robert gibt dazu ja schon eine Menge an Tipps und viele seiner Kommentare erläutern noch mehr Hintergründe.
    Nun, ich w…

  • Leser-Dialog separat im Fokus

    Alle aktuellen Leser-Interaktionen auf einen Blick – eine kleine Anpassung im Weblog bietet für Interessenten und Stammleser eine neue Übersicht zur Orientierung und zum Weiterlesen. Nachdem ich gestern die Liste der aktuellen Kommentare zugu…

  • Robert,

    Gibt es hierzu ein Update? Ist das aktuelle Plugin in der Version 1.5.3 schon optimiert worden, oder sollte man nach wie vor entweder (a) die Join’s aufdröseln, oder (b) wie Du beschrieben hast, per DB Anpassung und WHERE Klausel vorgehen?

    Merci!