Code Optimierung in PHP ist eine wichtige Sache, da bei schlechter Programmierung/nicht optimiertem Code die Performance leidet. Deswegen habe ich hier einmal das wichtigste zusammen gefasst:
true vs. TRUE:
PHP verwaltet die Konstanten (true, false, null) kleingeschrieben. Dadurch werden diese, wenn sie großgeschrieben sind, erst beim 2. Durchlauf entdeckt. Das kostet Rechenzeit!
mysql_fetch_*:
- mysql_fetch_row
- mysql_fetch_assoc
- mysql_fetch_array
- mysql_fetch_object
Ich habe die Funktionen absteigend nach ihrer Geschwindigkeit sortiert.
mysql_fetch_row ist am schnellsten, da es am wenigsten Speicher verbraucht, weil dort ein Array mit numerischem Index erzeugt wird.
mysql_fetch_assoc nutzt dagegen den Spaltennamen als Index (assoziatives Array), was etwas mehr Speicher verbraucht. Da es aber komfortabler zu Handhaben ist, ist das denke ich mal vertretbar *g* Ich selber nutze die Funktion auch.
mysql_fetch_array ist eine Mischung aus _row und _assoc. Es wird ein Array erstellt, der sowohl über den numerischen Index, also auch über den Spaltennamen angesprochen werden kann. Dies ist in den meisten Fällen unnötig, und pure Ressourcenverschwendung ;
Bei mysql_fetch_object bin ich mir nicht sicher, warum das am langsamsten ist, aber ich vermute, dass es daran liegt, dass ein Objekt erzeugt wird.
Hier sind noch einmal die Ergebnisse eines kleinen Benchmarktests mit 100.000 Datensätzen:
_row: 0.339648962021s
_assoc: 0.365229129791s
_array: 0.383218050003s
_object: 0.490003108978s
Die schnellste Funktion bei Kontrollstrukturen zuerst:
Es ist schneller, bei Kontrollstrukturen zuerst die schnellere Funktion auszuführen, da bei OR nur eine der Bedingungen erfüllt sein muss, damit die Abfrage erfolgreich ist. Bei AND ist die Bedingung nicht erfolgreich, wenn nur eine der Bedingungen nicht erfolgreich ist, also sollte man dort auch erst die schnellere Funktion ausführen, da dann, wenn diese false zurückgibt, die restlichen Überprüfungen nicht mehr ausgeführt werden.
Funktionsaufrufe in der Bedingung einer Schleife
Die Bedingung einer Schleife wird vor/nach jedem Durchlauf geprüft. Kommt jetzt eine Funktion in der Schleife vor, wird diese ergo jedes mal ausgeführt. Deswegen sollte man in der Bedingung der Schleife nur Variablen verwenden, und die Funktion vorher ausführen, also z.B. so:
1 2 3 4 | $count = count($array); for($i=0;$i<$count;$i++){ doSomething(); } |
Folgendes wäre deswegen “falsch”/Ressourcenfressend:
1 2 3 | for($i=0;$i<count($array);$i++){ doSomething(); } |
Ausgabe: echo vs. print:
Es macht kaum noch einen Unterschied, ob man echo oder print benutzt. Allerdings ist echo immer noch ein klein wenig schneller. Hier einmal die Benchmarkergebnisse mit 10.000 Durchläufen:
echo: 0.00524592399597s
print: 0.00557279586792s
str_replace vs. preg_replace bei einfachen Texten
Möchte man nur einfache Textstücke ersetzen, reicht str_replace, da diese Funktion schneller Arbeitet als preg_replace. Also wenn man z.B. “abc” in “abcdefg” ersetzen möchte, sollte man str_replace verwenden, anstatt preg_replace. preg_replace sollte man nur verwenden, wenn man auch wirklich Reguläre Ausdrücke braucht.
Das war jetzt erstmal das wichtigste, was mir spontan eingefallen ist. Ich hoffe euch hat der Artikel gefallen. Und wenn ihr noch Optimierungstipps vermisst, schreibt einen Kommentar, und ich werde es ergänzen ![]()

