An den richtigen Stellen schrauben

PHP-Optimierung

Mit der Anzahl der Features, Gimmiks und Besucher auf der Website steigt auch die Last für die Skripte auf der Serverseite. Dennoch können Sie die Geschwindigkeit Ihrer PHP-Anwendungen deutlich erhöhen.

PHP-Performance-Optimierung

© Archiv

Mehr Speed dank sinnvoller Verbesserungen.

Die Geschwindigkeit einer Webanwendung ist von vielen Faktoren abhängig. Neben der zugrunde liegenden Serversoftware und -hardware sind sowohl eine effiziente Programmierung als auch ein auf Geschwindigkeit ausgelegtes Anwendungsdesign wichtig.Leider treten Performance-Probleme meist nicht während der Entwicklungsphase auf, sondern erst im laufenden Produktivbetrieb, wenn viele Benutzer parallel auf die Anwendung zugreifen und die Datenmengen in der Datenbank kontinuierlich anwachsen. Wer da im Vorfeld einige Dinge beherzigt, kann sich unter Umständen später leidvolle Erfahrungen ersparen.

Die Optimierung der Geschwindigkeit ist oftmals eine Wanderung auf einem schmalen Grat. Viele Entwickler sind der Ansicht, dass eine zu starke Performance-Optimierung zulasten eines sauberen Anwendungsdesigns geht und damit die Lesbarkeit und Wartungsfreundlichkeit einer Anwendung darunter leidet. Manche der im weiteren Verlauf dieses Artikels aufgeführten Optimierungsverfahren sind tatsächlich nur dazu geeignet, das letzte Quäntchen Geschwindigkeit aus einer PHP-Anwendung zu pressen.

Der Einsatz dieser Methoden macht oft auch nur dann Sinn, wenn Sie auf diesen letzten Hauch Geschwindigkeit wirklich angewiesen sind. Wie so oft gilt auch hier die 80/20-Regel (Pareto-Prinzip). Mit einigen der gezeigten Optimierungen können auf einfache Weise große Geschwindigkeitsverbesserungen erreicht werden, andere liefern stattdessen nur geringe Verbesserungen.

Tricks und Kniffe

Ein großes Plus und vielleicht auch einer Hauptgründe für die Popularität von PHP ist die überwältigende Anzahl an Funktionen, die die Sprache bereits standardmäßig beinhaltet. Nicht selten stehen für ein und dieselbe Aufgabe mehrere Befehle zur Verfügung, die für die Lösung genutzt werden können.

Tückischerweise sind diese Funktionen aber oft unterschiedlich performant. Im Folgenden möchten wir Ihnen einige Beispiele zeigen, wie Sie mit einfachen Tricks die Geschwindigkeit der PHP-Skripte erhöhen können. Selbstverständlich dürfen Sie hierbei keine Wunder wie eine Geschwindigkeitsverdopplung erwarten, dennoch ist es lohnenswert einige diese Kniffe zu beachten.

Mit der Version 5 hielten die magischen Funktionen Einzug in PHP. Diese oft auch Interzeptoren genannten Funktionen haben den Vorteil, dass sie viele Aufgabenstellungen vereinfachen. Allerdings haben sie auch den Nachteil, dass sie zulasten der Geschwindigkeit gehen. Nach Möglichkeit sollte man den Einsatz von Funktionen wie __get, __set, __call oder __autoload vermeiden und nur dann einsetzen, wenn sie den Programmcode deutlich vereinfachen oder die Performance keine große Rolle spielt.

Reguläre Ausdrücke

Reguläre Ausdrücke sind eine Erfindung, die wohl keiner mehr missen möchte, der viel mit String-Verarbeitung zu tun hat. Sie geben Entwicklern mächtige Werkzeuge an die Hand, um Strings zu durchsuchen, zu zerlegen oder Teile zu ersetzen. Diese vielfältige Einsatzmöglichkeit erkauft man sich allerdings mit einer langsameren Verarbeitung, als bei den restlichen PHP-String-Befehlen. Das folgende Listing zeigt ein paar Beispiele hierfür.

<?php
// Langsam
if (preg_match("!^foo_!i",
"FoO_")) { ... }
// Viel schneller
if (!strncasecmp("foo_",
"FoO_", 4)) { ... }
// Langsam
if (preg_match("![abcd]!",
"sometext")) { ... }
// Schneller
if (strpbrk("abcd", "sometext"))
{ ... }
// Langsam
if (preg_match("!suche!i", "text"))
{ ... }
// Schneller
if (stripos("text", "suche") !==
false) { ... }
// Langsam
$text = preg_replace( "/\n/", "\\n",
$text);
// Schneller
$text = str_replace( "/\n/", "\\n",
$text);

Reguläre Ausdrücke sollten also mit Bedacht eingesetzt werden. Sie sollten immer dann zum Einsatz kommen, wenn Sie komplexe Aufgaben zu lösen haben, für deren Lösung normalerweise mehrere Befehle notwendig wären. Bei einfacheren Aufgaben sollte man sie aufgrund der Geschwindigkeitsverluste vermeiden und stattdessen die PHP-Befehle nutzen. Ein Blick in die offizielle PHP- Online-Dokumentation lohnt sich hier also auf alle Fälle, um sich eine Übersicht über die verfügbaren PHP-Stringbefehle zu verschaffen.

Fehlerbehandlung

Die Behandlung von Fehlern ist eine wichtige Arbeit im täglichen Leben eines Entwicklers. Die meisten PHP-Funktionen schreiben im Fehlerfall die Fehlermeldung direkt in die Ausgabe des Skriptes. Da dies auf einem Produktivsystem unerwünscht ist, greifen viele zum @-Operator. Dieser unterdrückt die Fehlerausgabe der PHP-Funktionen. Da die Verwendung des Operators sehr einfach und bequem ist, kommt er häufig zum Einsatz. Das folgende Listing zeigt ein Beispiel hierfür.

<?php
$connection = @mysql_
connect(...);
$result = @mysql_query
('SELECT ...', $connection);
?>

Sieht soweit alles in Ordnung aus, oder? Aus Performance-Sicht leider nein. Der @-Operator ist unheimlich langsam. Die Ursache hierfür liegt in der Implementierung des Operators verborgen, die bei jeder Verwendung des Operators die Fehlerausgabe deaktiviert und anschließend wieder aktiviert. Das Ergebnis entspricht somit folgendem Quellcode.

<?php
$old = ini_set('error_
reporting', 0);
$connection = mysql_
connect(...);
ini_set('error_
reporting', $old);
$old = ini_set('error_reporting', 0);
$result = mysql_query('SELECT ...',
$connection);
ini_set('error_reporting', $old);
?>

Dass dies nicht besonders performant sein kann, leuchtet sofort ein. Die Ausgabe von Fehlern sollten Sie daher entweder für ein ganzes Skript oder für eine ganze Anwendung deaktivieren und nicht nur für einzelne Befehle.

Content Caching

Der Sinn und Zweck einer Skript-Sprache wie PHP ist die Möglichkeit, Inhalte einer Seite zu dynamisieren und entsprechend den Inhalten einer Datenbank oder einer anderen Datenquelle anzupassen. Foren, Content-Management-Systeme oder Blogs sind Beispiele für diese Art der Inhaltsanzeige. Doch eher selten ändert sich der Inhalt einer statischen Webseite, eines Blogs oder einer Internetseite, die mit einem CMS-System entwickelt wurde.

Und so verhält es sich bei vielen PHP-Skripten. Bei jedem Aufruf werden dennoch die Daten aus der Datenbank gelesen, von PHP in HTML umgewandelt und an den Browser geschickt, auch wenn keine Änderung zur letzten Seitenanzeige vorhanden ist.

Die Lösung dieses Problems ist ganz einfach: Die von PHP erzeugte HTML-Seite wird zwischengespeichert. Diese gecachte Version der Seite wird dann an den Browser ausgeliefert, ohne dass dazu Datenbankzugriffe notwendig wären. Glücklicherweise muss man sich als Entwickler nicht selbst um die Verwaltung des Caches kümmern.

Dazu existieren einige sehr gute freie Bibliotheken, die diese Aufgabe übernehmen können. Zu den bekanntesten und leistungsfähigsten gehören unter anderem Pear-Cache, die Cache-Klasse von Ezcomponents und Zend_Cache aus dem Zend-Framework.

Im Folgenden wollen wir einen genaueren Blick auf die Cache-Klasse von Pear werfen. Dieses Pear-Paket ist sehr flexibel und kann unterschiedliche Informationen in einem Zwischenspeicher ablegen. Diese Informationen können Ergebnisse einzelner Funktionsaufrufe oder auch der gesamte Seiteninhalt sein. Das folgende Listing zeigt den Einsatz der Bibliothek anhand eines einfachen Beispiels.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".