Webフレームワークパフォーマンス比較

メモ的な記事です。Webフレームワークを比較したい人は下記に掲載したリンク先を見てください。

ちょっとわけあって、パフォーマンスに優れたWebフレームワーク(シンプルな機能で速いフレームワーク)は何かというのを知りたくて調べた。できれば言語はScalaで速いのがあるといいな…。

今回見たところ

reu/fibaas

フィボナッチ数列を計算して出力することで比較を行うという、よくある感じの比較の仕方。結果は以下の通りだ。

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位。

というあたりで自分の知りたいことがわかったので今回はここまで。