Home
PHP VS .NET - Runde 2 - Benchmark
Als Rahmen für das Benchmark dient eine ASP.NET Website, welche für jeden Benchmark Durchlauf abwechselnd eine ASP.NET und eine PHP Seite aufruft, und die Ausgabe für die Auswertung parst.
Die Seiten selbst bekommen übergeben wie oft welche Methode laufen soll, stoppen die jeweilige Ausführungszeit und geben das Ergebnis aus.
Wenn Interesse besteht stelle ich den Quellcode auch gern zum Download bereit.
Die Runs der jeweiligen Methoden wurden so angepasst, dass die schnellere der Sprachen mindestens ein zweistellige Zahl erreicht.
Das Benchmark hat beide Seiten jeweils 500 mal aufgerufen.
Test 1 - Math
Einfache Grundrechnungen die sich in beiden Sprachen kaum unterscheiden.Bei 1.600.000 Runs hat PHP im Schnitt 484ms gebraucht und .NET 13ms.
Test 2 - Strings
Hier wurde die Zeichenkette umgekehrt, ein Substring extrahiert und alle Zeichen in Grußbuchstaben umgewandelt. In .NET musste ich für die Umkehrung der Zeichenkette eine kleine Helfermethode schreiben.Bei 35.000 Runs hat PHP im Schnitt 67ms gebraucht und .NET 14ms.
Test 3 - Encryption
Getestet wurden MD5, SHA1 und CRC32. Bei .NET war dies etwas aufwändiger, da jede Encryption mehre Methodenaufrufe benötigt.Bei 7.000 Runs hat PHP im Schnitt 14ms gebraucht und .NET 208ms.
Test 4 - Dates
Hier wurde einmal das aktuelle Datum und Neujahr formatiert ausgegeben, dann noch etwas mit der Timestamp gerechnet und ebenfalls formatiert ausgegeben.Beim formatieren ist .NET etwas umständlicher, dafür geht das Rechnen mit Datumsangaben wiederrum leichter.
Bei 3.000 Runs hat PHP im Schnitt 167ms gebraucht und .NET 11ms.
Test 5 - Images
Dieser Test erzeugt ein neues Bild mit einem Text darin.Bei 300 Runs hat PHP im Schnitt 12ms gebraucht und .NET 34ms.
Test 6 - Arrays
Arrays sind bei beiden Sprachen schwer zu vergleichen. Während es bei PHP einen sehr flexiblen Typ dafür gibt, hat .NET viele spezialisierte Typen für bestimmte Aufgaben.In diesem Test musste die Umgebungsvariable $_SERVER herhalten und wurde kräftig durcheinandergebracht und anschließend nach dem Key sortiert.
Bei 300 Runs hat PHP im Schnitt 12ms gebraucht und .NET 31ms.
Test 7 - Arrays durchsuchen
Hier wurde die Umgebungsvariable $_SERVER nach einem bestimmten Wert durchsucht und der Key dazu ermittelt.Bei 5.000 Runs hat PHP im Schnitt 1181ms gebraucht und .NET 12ms.
Test 8 - Filesystem
Dieser Test versucht das PHP Benchmark Script zu kopieren, liest dabei noch die Dateigröße aus und überprüft ob die Datei lesbar und schreibbar ist.Bei 50 Runs hat PHP im Schnitt 23ms gebraucht und .NET 14ms.
Test 9 - Objekte
Dem Konstruktor wird eine Zeichenkette als Parameter übergeben welche dann in einem Feld gespeichert wird. Anschließend wird diese Zeichenkette über eine Methode wieder ausgelesen und über eine weitere Methode werden zwei Zahlen multipliziert.Bei 450.000 Runs hat PHP im Schnitt 1.100ms gebraucht und .NET 11ms.
Test 10 - MySQL Verbindungsaufbau
Dieser Test öffnet eine MySQL Verbindung, wählt eine Datenbank und schließt die Verbindung wieder.Bei 25 Runs hat PHP im Schnitt 73ms gebraucht und .NET 14ms.
Test 11 - MySQL SELECT
Dieser Test führt einen SELECT Query aus und packt das Ergebnis in eine DataTable bzw. in ein Array zur Weiterverarbeitung.Bei 20 Runs hat PHP im Schnitt 30ms gebraucht und .NET 17ms.
Und hier die Ergebnisse noch einmal zusammengefasst:
| Test | PHP | .NET |
| Math | 484 | 13 |
| Strings | 67 | 14 |
| Encryption | 14 | 208 |
| Dates | 167 | 11 |
| Images | 12 | 34 |
| Arrays | 12 | 31 |
| ArraysSearch | 1181 | 13 |
| Filesystem | 23 | 14 |
| Objects | 1100 | 11 |
| MySQLConnect | 73 | 14 |
| MySQLSelect | 30 | 17 |
| SUMME | 3166 | 386 |
Im Nachhinein fällt mir auf, dass der Object-Test vermutlich durch das Multiplizieren verfälscht wird. Aber auch wenn man das Verhältnis von 1:37 beim Grundrechnen von den 1:100 bei Objekten abzieht ist hier noch eine erhebliche Differenz zu erkennen.
Fazit:
In der Summe geht hier der Sieg ganz klar an .NET.
Um jedoch messbare Ergebnisse im Millisekunden-Bereich zu bekommen muss man zum Teil extrem viele Operationen ausführen, die in der Praxis in dieser Häufigkeit wohl eher selten vorkommen.
Der Geschwindigkeitsunterschied dürfte also für den Besucher einer Seite nur in Sonderfällen fühlbar sein.
PHP VS. NET - Runde 1 - Apache oder IIS für PHP
Ich habe mir schon des Öfteren die Frage gestellt ob .NET oder PHP für eine Website schneller ist. Da ich gehört habe, dass der ISS mittlerweile für PHP schneller sein soll als der Apache, habe ich mich erst mal damit beschäftigt.
Zum Testen habe ich ein Benchmark von Sourceforge verwendet. Leider kann ich das Script nicht verlinken, da der Link nicht mehr funktioniert. Falls das Benchmark jemand erkennt bitte eine kurze Mitteilung an mich, damit ich den Link noch einfügen kann.
Das Script enthält Test für Encryption, die Verarbeitung von Strings und Datumsangaben, Bildbearbeitung, Array-Handling, Zugriff auf das Dateisystem und Objekte. Um auf messbare Ergebnisse zu kommen werden die Tests natürlich mehrfach wiederholt.
| Apache mit PHP 5.2.17 |
Apache mit PHP 5.3.5 |
IIS7 mit PHP 5.3.5 |
Der erste Testdurchlauf erfolge auf meinem aktuell installierten Apache mit PHP 5.2.17. Da aber die PHP Version aber nicht die aktuellste war, habe ich den Test nach einem Update auf Version 5.3.5 noch einmal laufen lassen.
Für den dritten Testdurchlauf habe ich mir die gleiche PHP Version als FastCGI Modul auf dem IIS7 installiert.
Dank des neuen PHP Managers für den IIS7 ging das deutlich einfacher als in der Vergangenheit.
Fazit:
Man sollte immer darauf achten eine aktuelle PHP Version installiert zu haben, gerade wenn sich die Minor-Version verändert, da dies meist etwas umfangreichere Änderungen mit sich bringt.
Der Server hingegen macht keinen großen Unterschied bei der Ausführungsgeschwindigkeit von PHP.
