WordPress Performance optimieren: Caching

Wenn es um Performance von Content Management Systemen geht, kommt man fast nicht um eine Caching-Lösung: In diesem Beitrag zeigen wir Vorteile und Schwierigkeiten von Caching-Strategien auf.

memcached.orgIn dem Beitrag über Profiling haben wir erklärt, wie eine unperformante Stelle im PHP Skript identifiziert werden kann. Mit einem Tool wie kCacheGrind kann man visuell schnell herausfinden, wie lange Datenbankaufrufe dauern oder wie viele Hooks noch zusätzlich von WordPress im Hintergrund ausgeführt werden. Es können nun mehrere Fälle auftreten, in denen weitere direkte Code-Optimierungen nicht mehr sinnvoll sind. Ein paar Beispiele:

  • Komplexes SQL Statement, welches über JOIN gewisse Resultate liefert, bei dem auch darauf geachtet wird, dass indexiert abgefragt wird.
  • Nicht-triviale Sortierung von Objekten mit Ausnahmen und Hierarchien: Grössere Menüstrukturen, welche beim Seitenaufbau dynamisch generiert werden.
  • Grösseres Datenset: z.B. mehr als 10’000 Kommentare in der Datenbank können komplexe Abfragen um Kommentare erheblich verlangsamen.

» mehr

WordPress Hooks

Hooks – oder allgemeiner Schnittstellen – erlauben dem Entwickler, die Funktionalität und das Aussehen von WordPress zu erweitern. Von Plugins werden Hooks verwendet, um in den WordPress-Kern einzugreifen, jedoch ohne den Quellcode des WordPress-Kerns zu verändern. In Themes werden Hooks eingesetzt um die Darstellung auf der Website zu verändern. Entwickler können Hooks aber auch einsetzen, um Schnittstellen für andere Plugins und Themes anzubieten.

Das Pluginsystem mit Hooks ist vergleichbar mit einem Ereignisbehandlungssystem.Die Bezeichnungen sind aber weniger präzise gehalten. Wir reden nicht von in der Informatik etablierten Begriffen wie Observer, Listener und Event-Dispatching, sondern von Actions, Filter, Hooks und Callbacks. Hooks bezeichnen Ereignisse, bei welchen sich ein Plugin oder ein Theme mit eigenem Code oder Callback-Funktionen «einhängen» kann. Dieses System reagiert aber nicht auf Benutzerereignisse, sondern auf Ereignisse im Verlauf des Seitenaufbaus. Ein gutes Beispiel dazu liefert McCormick & Winter. » mehr

Xdebug und kCacheGrind: PHP-Skripte debuggen und profilieren

Letzten Monat haben wir eine Möglichkeit vorgestellt, wie wir die Auslastung unserer Infrastruktur mittels StatsD überwachen können. Damit aber diese «Large-Scale»- Probleme optimiert werden können, muss die Performance zuerst im einzelnen Seitenaufruf stimmen. Dies können wir im Einzelfall mittels der PHP Erweiterung Xdebug und einem cachegrind Analysetool wie kCacheGrind lösen.

Bei jedem komplexeren Softwareprojekt ist es fundamental wichtig, unerwartete Verhaltensweisen der Anwendung genauer untersuchen, beziehungsweise “debuggen” zu können. Auch bei der Entwicklung mit PHP braucht es öfters die Fähigkeit, das Skript an mehreren Stellen in der Ausführung anzuhalten und verschiedene Abhängigkeiten in der Laufzeitumgebung zu untersuchen. Ein simples var_dump oder echo gibt zu wenig Einblick in die Funktionsweise des Skripts. Die PHP-Erweiterung Xdebug in Kombination mit einer IDE wie NetBeans oder PhpStorm schafft hier Abhilfe. Xdebug ist eine Erweiterung, die es erlaubt PHP-Skripte anzuhalten und genauer zu untersuchen. Ausserdem kann sie einen ganzen Request profilieren, das heisst: alle Funktionsaufrufe nach Performance sortiert zu analysieren. » mehr