Sven Rautenberg: Verständnisfrage

Beitrag lesen

Moin!

Dazu meine Frage: Was ist schneller?

Das Gesetz der Logik gebietet, dass der Funktionsaufruf natürlich mehr Zeit kostet, als die direkte Ausführung.

Allerdings dürfte der Unterschied im Mikrosekundenbereich liegen, so dass an erster Stelle viel eher die Verständlichkeit des Codes stehen sollte. Weiterhin würdest du selbstverständlich beim Parsing des Skriptes wieder mehr Zeit verlieren, wenn deine aufwendige Zusammenfassungsfunktion an mehr als einer Stelle aufgerufen werden könnte, und du stattdessen Code mehrfach kopieren mußt.

Hab so sachen gehört, dass Funktionen nicht compiled werden oder so ähnlich.

PHP übersetzt den Quelltext in einen Syntaxbaum, der dann abgearbeitet wird. Das kann man mit viel gutem Willen als Compilieren bezeichnen, und es bietet für Zusatzmodule auch den Ansatzpunkt, diesen Syntaxbaum in einem Cache zu speichern, um bei späteren Skriptaufrufen das Parsing einzusparen.

Tatsache ist, dass sämtlicher Quelltext in diesen Syntaxbaum übersetzt wird, auch Funktionen.

Oder das Funktionen langsamer wären, wie wenn man die direkt in die schleife einbaut.

Korrekt. Der Funktionsaufruf erfordert mehr Ausführungszeit, als ein direkter Befehl, weil für die Funktion ein lokaler Variablenraum geschaffen wird, die Rücksprungadresse und Register auf den Stack gespeichert und bei der Rückkehr wiederhergestellt werden müssen, etc.

Und in der Tat wäre die Eliminierung von Funktionsaufrufen in Schleifen ein Ansatzpunkt, um die Ausführungszeit eines Skriptes positiv zu beeinflussen. Andererseits sollte man solche Optimierungen auch immer unter einem Kosten-Nutzen-Faktor sehen: Die Optimierung des Quelltextes kostet viel Zeit, und bringt verhältnismäßig wenig Gewinn (sofern nicht extreme Bremsen eingebaut wurden). Der Einsatz eines PHP-Caches (http://www.golem.de/0511/41800.html listet einige Namen) bringt ein Performanceplus sofort ohne Arbeitszeit. Die Investition in leistungsfähigere Hardware steht ebenso zur Disposition. Und zu guter Letzt: compilierte Sprachen sind gegenüber PHP erheblich schneller - wenn also Performance ein absehbares Problem ist, bietet es sich nicht an, in PHP zu beginnen, sondern gleich C, C++, Java/JSP oder ähnliches zu verwenden.

Alle diese alternativen Möglichkeiten sind abzuwägen gegen den Zeit- und damit Geldaufwand einer manuellen Quellcode-Optimierung. Und gegen die möglichen Auswirkungen solch einer nervigen Arbeit auf die Stimmung der Programmierer.

- Sven Rautenberg

--
"Love your nation - respect the others."