
Funktionen oder iterative Programmierung?
Wie in allen Programmiersprachen, die Funktionen unterstützen, gilt auch in PHP, dass man keine Codeblöcke einfach von einem Script in ein anderes kopieren sollte. Ich höre Stimmen: "Aber ich brauche diesen Block doch in beiden Scripten".
Meine Antwort: "Richtig, dagegen ist auch nichts einzuwenden. Aber du brauchst den Code nicht 2 mal."
Dieser Dialog zielt darauf ab, dass es Funktionen gibt und diese sollte man auch nutzen – und am besten effektiv nutzen. Leider gibt es nämlich auch das Gegenteil zu den in diesem Artikel beschriebenen Entwicklern: solche, die fast vollständig ohne Funktionen auskommen und lieber iterativ von der ersten bis zur letzten Zeile vorgehen. Was ist nun besser?
Funktionen, die in mehreren Dateien vorkommen, sollte man in einer Funktionendatei unterbringen, die man dann in die Scripte per include() einfügen kann, wo sie benötigt werden.
Das Problem an einer solchen Funktionendatei ist, dass der include()-Befehl ausgeführt werden muss und alle in der eingefügten Datei enthaltenen Funktionen interpretiert werden müssen. Es ist also bequem mit Funktionen zu programmieren – ohne Frage.
Da dieser Blog allerdings nicht "PHP Möglichst bequem" sondern "PHP Performance" heißt, möchte ich auf die Möglichkeit verweisen, Funktionen nicht zu verwenden, wenn man wirklich jedes Quentchen Performance aus seiner Anwendung holen möchte.
Ich hab da mal was vorbereitet:
function getName() { return "Jan"; } function getBeitraege() { return array("Test 1","Test 2","Test 3"); } function formatBeitraege($arr) { $str = ""; foreach($arr as $beitrag) { $str .= $beitrag."<br />"; } return $str; } echo getName(); echo "Neue Beiträge für dich:<br />"; echo formatBeitraege(getBeitraege());
Dieses Script arbeitet mit Funktionen. Als Gegner tritt folgendes Script an, das iterativ vorgeht:
$name = "Jan"; $beitraege = array("Test 1","Test 2","Test 3"); echo "Hallo ".$name; echo "Neue Beiträge für dich:<br />"; foreach($beitraege as $beitrag) { echo $beitrag."<br />"; }
Beide Scripte arbeiten mit vorgegebenen Daten. In der Praxis würden die Daten bei dem funktionsorientierten Script innerhalb der Funktionen aus der Datenbank geholt bzw. beim iterativen direkt die Queries in der Zeile geschrieben, in der sie benötigt werden.
Auswertung
Als Ergebnis erhält man folgendes:
| Datei | Gesamtlaufzeit | durchschnittliche Laufzeit pro Durchlauf | Verhältnis zur schnellsten Variante |
|---|---|---|---|
| result_ausgabe_ iterativ.php |
12.748331 s | 1.275 ms | 100 % |
| result_ausgabe_ funktionen.php |
13.639613 s | 1.364 ms | 107 % (+ 7%) |
Die iterative Methode ist in diesem Fall durchaus schneller. Allerdings wird ein großes Script durch solche Aktionen schnell unübersichtlich. Deshalb kann ich diese Methode nur für PHP-Scripte empfehlen, die wirklich auf jedes Quentchen Geschwindigkeit achten müssen.
Schlagwörter: funktionen, iterativ, performance, PHP, prozedural













PHP Performance » Das Rätsel um –enable-inline-optimization sagt
am 17. Mai 2007 @ 11:13
[...] Optimizations oder auch Inline Expansion ist eine Idee, die vom Prinzip her mit meinem Beitrag zu iterativer Programmierung in PHP korresponsiert. Dort habe ich gezeigt, wie man statt einer Funktion den gleichen Nutzen mithilfe [...]
A. Rust sagt
am 9. Januar 2009 @ 11:32
Hallo,
generell sollte man bedenken, dass beide Ansätze nicht auf Wartbarkeit abzielen und für software engineers unpraktikabel sind. OOP ist der Schlüssel zu einer zwar geringfügig langsameren Verarbeitung, jedoch zu einer wesentlich übersichtlicheren Darstellung und Verwendung in Teams, komponenten- sowie modulorientierung. Das zeigt die Praxis. Enterprise-Software wird niemals funktional oder iterativ programmiert.
Mit Aufkommen der Multiprozessorsysteme ist die "Funktionale Programmierung" allerdings eine zukunftsweisende Technologie, da der OOP-Ansatz hier im Wege steht.
LG
André
Sebastian sagt
am 11. Januar 2009 @ 20:19
Etwas out of Topic:
@André
Hast du zu der Aussage mit dem OOP-Ansatz und den Multiprozesorsystemen eine Quelle?
Danke und viele Grüße
Sebastian