Mittwoch, 24. Juli 2013

PHP Performance auch eine Frage der Kommentare und der Zeilenvorschübe


Kommentare im PHP Source erzeugen keinen Performanceverlust.

Solch ähnliche Aussagen findet man immer wieder im Netz.

Doch ist es wirklich so ?

Um das mal zu checken fügten wir einen 72 Zeilen langen Kommentar ein um dann über echo eine Text 'Das ist ein Test' auszugeben.

Dann setzten wir dieses Miniscript mit Siege unter Feuer.

Das Ergebnis:

siege -b -c500 --time=1M http://localhost/cmsms/t1.php
** SIEGE 3.0.1
** Preparing 500 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.

Transactions:      176360 hits
Availability:      100.00 %
Elapsed time:       59.53 secs
Data transferred:        2.69 MB
Response time:        0.17 secs
Transaction rate:     2962.54 trans/sec
Throughput:        0.05 MB/sec
Concurrency:      492.55
Successful transactions:      176367
Failed transactions:           0
Longest transaction:        2.45
Shortest transaction:        0.00

Dann wurde der Kommentar entfernt und der gleiche Benchmark gestartet - das Ergebnis:

 siege -b -c500 --time=1M http://localhost/cmsms/t1.php
** SIEGE 3.0.1
** Preparing 500 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.

Transactions:      194545 hits
Availability:      100.00 %
Elapsed time:       59.54 secs
Data transferred:        2.97 MB
Response time:        0.15 secs
Transaction rate:     3267.47 trans/sec
Throughput:        0.05 MB/sec
Concurrency:      496.09
Successful transactions:      194545
Failed transactions:           0
Longest transaction:        2.00
Shortest transaction:        0.00

Und tatsächlich die Anzahl der Transactions ging um 10,3% in die Höhe.

Nun wer wird denn schon einen 72 Zeilen Kommentar einfügen fragt man sich.
Das ist in der Programmierung nicht so selten.
Man kommentiert häufig eine Originalfunktion aus, lässt den kommentierten Code stehen um ihn sehen zu können und um darunter eine veränderte Funktion zu erstellen.

Eine andere Situation stellen Zeilenvorschübe dar.

Statt eines Kommentars fügen wir einmal 72 Zeilenvorschübe ein und testen.
Das Ergebnis:

 siege -b -c500 --time=1M http://localhost/cmsms/t1.php
** SIEGE 3.0.1
** Preparing 500 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.

Transactions:      202512 hits
Availability:      100.00 %
Elapsed time:       59.29 secs
Data transferred:        3.09 MB
Response time:        0.15 secs
Transaction rate:     3415.62 trans/sec
Throughput:        0.05 MB/sec
Concurrency:      496.18
Successful transactions:      202512
Failed transactions:           0
Longest transaction:        1.79
Shortest transaction:        0.00

Das Ergebnis ist verblüffend - es ist sogar schneller als der Test ohne alles. Dort wurde der Ausgabecode in eine Zeile zwischen den PHP Tags geschrieben.

Nun fügen wir vor dem Start- und Endtag eine Leerzeile und dazwischen den Code ein und testen erneut:

siege -b -c500 --time=1M http://localhost/cmsms/t1.php
** SIEGE 3.0.1
** Preparing 500 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.

Transactions:      202765 hits
Availability:      100.00 %
Elapsed time:       59.57 secs
Data transferred:        3.09 MB
Response time:        0.15 secs
Transaction rate:     3403.81 trans/sec
Throughput:        0.05 MB/sec
Concurrency:      496.26
Successful transactions:      202765
Failed transactions:           0
Longest transaction:        2.18
Shortest transaction:        0.00

und siehe da - PHP 5.6 kommt besser damit klar wenn zwischen den PHP Tags eine Leerzeile steht.

Was aber passiert wenn wir den Minicode und die Tags in eine einzige Zeile schreiben ?

Testen wir es:
 siege -b -c500 --time=1M http://localhost/cmsms/t1.php
** SIEGE 3.0.1
** Preparing 500 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.

Transactions:      189835 hits
Availability:      100.00 %
Elapsed time:       59.59 secs
Data transferred:        2.90 MB
Response time:        0.16 secs
Transaction rate:     3185.69 trans/sec
Throughput:        0.05 MB/sec
Concurrency:      495.17
Successful transactions:      189835
Failed transactions:           0
Longest transaction:        2.25
Shortest transaction:        0.00

Und siehe da  die Performance wird wieder schlechter.

Stellen wir also fest


  1. Allein die Verwendung von Kommentaren kann die Performance dramatisch absenken lassen
  2. Zeilenvorschübe zwischen dem PHP Starttag und PHP Endtag verbessern die Performance
  3. Reichlich Zeilenvorschübe ändern praktisch nichts in der Performance
Zu 1. sei bemerkt - je mehr Kommentare in dem Code vorhanden sind desto langsamer wird die Applikation.
Bei einem sehr ausführlich kommentierten längeren Script kann das 40% überschreiten - das ist kein Pappenstiel !!

Nun sind Kommentare aber notwendig um Hilfe im Zusammenhang mit einer IDE zu erhalten und um natürlich auch nach einiger Zeit und wie auch anderen Personen einen Einstieg zu ermöglichen.

Nun sind es aber Tatsachen das die Performance dramatisch sinkt.

Man sollte also den produktiv verwendeten Code von diesen Kommentaren befreien.



Keine Kommentare: