Genauso (un)wichtig, wie es zu wissen, wie schnell eine Programmiersprache `fib(30)` berechnen kann, ist es glaube ich zu wissen, wie schnell man "Hallo Welt" auf einer Webseite anzeigen kann. Das soll mich aber nicht aufhalten.
Ich benutze mal "ab -c 15 -n 1000
http://127.0.0.1/" zum Test.
Mit Pythons 2.6.3 eingebautem WSGI-Server komme ich auf 1379 R/s und 11 ms/R.
Mir ist aufgefallen, dass das Beispiel `return 'Hallo'` macht und nicht `return ['Hallo']`. Ersteres funktioniert, weil ein String wie eine Liste von Buchstaben aufgefasst wird. Die zweite Variante ist aber deutlich schneller: 2075 R/s und 7 ms/R.
Nutze ich Python 3.1, erreiche ich 1095 R/s und 14 ms/R.
Das einfache Django-Beispiel bekomme ich mit dem Entwicklungsserver nicht immer zum Laufen: 1562 R/s und 10 ms/R. Für das Template-Beispiel muss ich schon auf "-c 8" herunter gehen: 782 ms/R und 8 ms/R. Und für hellodb (mit "-c 8") erreiche ich 395 R/s und 18 ms/R. Ein fairer Test wäre jetzt mit mod_wsgi, aber das habe ich keine Lust zu installieren.
Stattdessen lieber Tornado: 3191 R/s und 5 ms/R. Soll es noch schneller sein? Dann gehe ich auf "-c 50" und erreiche 3394 R/s bei 15 ms/R.
Baue ich das Template-Beispiel von Django für Tornado nach (was einfach ist, weil die beiden Formate fast identisch sind) erreiche ich 2765 R/s mit 6 ms/R bei "-c 15" und 2757 R/s mit 18 ms/R bei "-c 50".
Bottle performt das Hallo-Welt bei mir mit 1876 R/s und 8 ms/R. Bei Templates (das Beispiel ist unfair, da die Vererbung fehlt) ist "-c 15" manchmal schon zu viel. Wenn's durchläuft, erreiche ich 1119 R/s bei 13 ms/R.
Kommen wir zu Ruby 1.8.7 und Rack:
Code: Alles auswählen
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, "Hello Rack!"]}
"-c 15" ist für den eingebauten Mongrel-Server zu viel. Mit "-c 7" komme ich auf 244 R/s und 29 ms/R. Mit Rails 2.3.4 komme ich auf 183 R/s und 38 ms/R für "Hallo, Welt" und 183 R/s und 39 ms/R für die Templates - sprich, es ist egal.
Aber ich habe "Thin", das Äquivalent zu Tornado. Zurück auf "-c 15" schaffe ich 4151 R/s und 4 ms/R. Mit "-c 50" erreiche ich auf 4410 R/s und 11 ms/R.
Rails unter Thin schafft 681 R/s und 22 ms/R bzw. 652 R/s und 77 ms/R.
Zugegeben läuft Thin bei mir unter Ruby 1.9. Das ist im Schnitt doppelt so schnell wie Ruby 1.8.7.
Dennoch: Thin gewinnt denn Hello-World-Kontest.
Stefan