メモ的な記事です。Webフレームワークを比較したい人は下記に掲載したリンク先を見てください。
ちょっとわけあって、パフォーマンスに優れたWebフレームワーク(シンプルな機能で速いフレームワーク)は何かというのを知りたくて調べた。できれば言語はScalaで速いのがあるといいな…。
今回見たところ
フィボナッチ数列を計算して出力することで比較を行うという、よくある感じの比較の仕方。結果は以下の通りだ。
Framework ranking
Language | Framework | Requests/sec | Total requests | Avg Latency |
---|---|---|---|---|
Haskell | Apiary | 69,056 | 2,076,808 | 2.33ms |
Scala | Colossus | 62,564 | 1,883,269 | 1.01ms |
Haskell | Spock | 57,416 | 1,724,062 | 2.57ms |
Haskell | Simple | 56,104 | 1,684,709 | 2.70ms |
Scala | http4s | 55,982 | 1,680,049 | 1.98ms |
Go | Gin | 55,943 | 1,679,347 | 1.17ms |
Haskell | Yesod | 55,090 | 1,653,803 | 1.80ms |
Scala | Spray | 51,003 | 1,534,841 | 2.23ms |
Haskell | Scotty | 50,048 | 1,502,738 | 2.90ms |
Go | Pat | 48,128 | 1,447,483 | 2.43ms |
Scala | Finatra | 47,259 | 1,418,230 | 11.54ms |
Scala | Finch | 47,117 | 1,413,699 | 10.60ms |
Java | Spark | 47,061 | 1,412,082 | 1.38ms |
Go | Gorilla | 46,729 | 1,402,482 | 2.77ms |
Clojure | Bidi | 39,833 | 1,199,033 | 1.64ms |
Rust | Iron | 38,921 | 1,167,751 | 685.06us |
Clojure | Compojure | 38,902 | 1,170,991 | 1.66ms |
Crystal | Kemal | 35,497 | 1,065,103 | 1.79ms |
Scala | Scalatra | 29,830 | 897,903 | 1.74ms |
Java | Jersey | 27,185 | 816,312 | 3.72ms |
Haskell | Snap | 23,756 | 715,166 | 7.11ms |
Scala | Play | 23,121 | 695,310 | 3.27ms |
Elixir | Sugar | 22,813 | 685,273 | 3.83ms |
Node.JS | Express | 22,696 | 683,177 | 3.15ms |
JRuby | Roda | 21,572 | 647,576 | 2.89ms |
Java | RESTEasy | 21,334 | 641,922 | 38.08ms |
Node.JS | Restify | 21,296 | 641,021 | 3.27ms |
Python | Wheezy Web | 20,678 | 622,462 | 3.48ms |
JRuby | Cuba | 19,744 | 594,352 | 3.93ms |
Elixir | Phoenix | 18,624 | 559,225 | 5.90ms |
Python | Pyramid | 15,660 | 463,135 | 4.47ms |
Node.JS | Koa | 13,787 | 413,737 | 5.00ms |
Scala | Akka HTTP | 13,141 | 394,707 | 14.47ms |
JRuby | NYNY | 12,466 | 374,159 | 3.20ms |
JRuby | Sinatra | 8,683 | 260,598 | 11.79ms |
Python | Flask | 8,094 | 242,894 | 7.99ms |
Haskell | Happstack Lite | 7,888 | 237,474 | 8.11ms |
Python | Django | 7,549 | 226,516 | 8.54ms |
Ruby | Roda | 7,537 | 226,137 | 2.12ms |
JRuby | Rails | 7,302 | 219,187 | 12.70ms |
Node.JS | Hapi | 6,121 | 183,882 | 10.82ms |
Ruby | Cuba | 5,246 | 157,422 | 3.04ms |
Ruby | NYNY | 3,671 | 110,173 | 4.35ms |
Ruby | Sinatra | 2,667 | 80,134 | 5.99ms |
Ruby | Rails | 2,334 | 70,108 | 6.86ms |
score from reu/fibaas
Scala / Playが意外に健闘してる。Akka HTTPがPlayより低い処理量なのはなんでだろう?Node.jsはもう少し早いと思っていたのだがあまりスコアが振るわない。1位はHaskell / Apiaryとのことだが、Haskellはちょっとわかんないな…。Scalaで一番はColossusか。Finatra / Finchより明らかに大量のリクエストを処理できるみたい。レイテンシが一番短いのはRustのフレームワークか。
(TechEmpower)[https://www.techempower.com/benchmarks/]
ネットであちこちに引用されているベンチマーク。ServletとSpringを同じグループでテストしてたり、比較的マイナーなフレームワークも評価しているためちょっと見方が難しい。
今回はわけあって一番シンプルなリクエストを行った時のスコアを知りたかったのでPlain Textを見てみた。
すると、こちらでもColossusは全フレームワークの中でも上位だが、レイテンシがすこぶる遅い。342.9 ms。前に引用した結果とも大きく乖離しており、これ測定ハードかなにかの問題では…。
同時実行数と処理数の関連を見てみると、Colossusは同時アクセスに非常に強いようだ。特に同時アクセス数16,384のときのスコアは全フレームワーク中で1位。
というあたりで自分の知りたいことがわかったので今回はここまで。