Rolf B: Single-Responsibility-Prinzip für PHP?

Beitrag lesen

Hallo MB,

leider ist das so. PHP 5 hat einen ziemlich großen Overhead bei Funktionsaufrufen. Das ist in PHP 7 - nach einem Mikrobenchmark, den ich gerade gemacht habe - deutlich schneller geworden. PHP 5.6 brauchte für 10 Millionen Aufrufe 17 Sekunden, PHP 7.1 dagegen 0,4s. Die Laufzeit der leeren Schleife ist herausgerechnet. Es ist also ca. Faktor 50 schneller geworden.

Methodenaufrufe sind ein klein wenig langsamer als direkte Funktionen - in PHP 5 und 7. In PHP 7 scheint die Differenz aber geringer zu sein.

Aber Vorsicht: Das ist ein Mikrobenchmark gewesen, der Funktionen verwendete die aus einem RETURN-Statement bestanden. Möglicherweise ist das nicht repräsentativ. Mach deinen eigenen - verwende microtime(false) zum Festhalten von Start- und Endzeit und gib Dir die Laufzeitdifferenz aus. Allerdings musst Du solche Messungen oft wiederholen - die erwähnten 10 Millionen Durchläufe waren es bei mir - weil Computers Kleinhirn so verflixt flott ist.

Ein Satz, den ich bei Stackoverflow dazu mal gelesen habe, lautet: "Wenn Du Dir über den Overhead von Funktionsaufrufen einen Kopf machen musst, ist PHP nicht das richtige Tool für dein Problem". Der stammt aber aus der PHP 5 Zeit.

Aufwändige Frameworks mit feingranularer Methodenstruktur sind nicht nur in PHP ein Performanceproblem. Java und C# gehen da genauso in die Knie, vor allem dann, wenn viele virtuelle Methoden im Spiel sind. In PHP sind ALLE Methoden virtuell, d.h. PHP kann keine Methodenaufrufe inline umwandeln.

Du musst deswegen jetzt nicht von Hand anfangen, aus Methodenaufrufen inline-Code zu machen. SRP ist aus architektonischer Sicht eine gute Sache.

Aber wirf auch mal einen Blick auf Abschnitt 1 in diesem Artikel. Die Wichtigkeit solcher Mikrooptimierungen hängt davon ab, wie Dir Deine Computerleistung berechnet wird.

Rolf