Fibonacci HTTP server performance comparison
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Clojure
Crystal/Kemal Adding Kemal Mar 24, 2016
Elixir Running Elixir in production mode (unfortunately, it didn't change th… Mar 5, 2016
Go
Haskell
Java
NodeJS Adding Hapi Mar 25, 2016
Python Adding Wheezy Web Mar 25, 2016
Ruby Adding JRuby. Mar 12, 2016
Rust/Iron
Scala Adding http4s Mar 24, 2016
.gitignore First commit. Feb 21, 2016
README.md

README.md

Fibonacci as a Service

Just a simple language benchmark with a naive implementation of Fibonacci served via HTTP.

fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

Results

Language 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
Go Gin 55,943 1,679,347 1.17ms
Java Spark 47,061 1,412,082 1.38ms
Clojure Bidi 39,833 1,199,033 1.64ms
Rust Iron 38,921 1,167,751 685.06us
Crystal Kemal 35,497 1,065,103 1.79ms
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
Python Wheezy Web 20,678 622,462 3.48ms
Ruby Roda 7,537 226,137 2.12ms

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

Per language ranking

Alphabetical order

Clojure

Framework Requests/sec Total requests Avg Latency
Bidi 39,833 1,199,033 1.64ms
Compojure 38,902 1,170,991 1.66ms

Crystal

Framework Requests/sec Total requests Avg Latency
Kemal 35,497 1,065,103 1.79ms

Elixir

Framework Requests/sec Total requests Avg Latency
Sugar 22,813 685,273 3.83ms
Phoenix 18,624 559,225 5.90ms

Go

Framework Requests/sec Total requests Avg Latency
Gin 55,943 1,679,347 1.17ms
Pat 48,128 1,447,483 2.43ms
Gorilla 46,729 1,402,482 2.77ms

Haskell

Framework Requests/sec Total requests Avg Latency
Apiary 69,056 2,076,808 2.33ms
Spock 57,416 1,724,062 2.57ms
Simple 56,104 1,684,709 2.70ms
Yesod 55,090 1,653,803 1.80ms
Scotty 50,048 1,502,738 2.90ms
Snap 23,756 715,166 7.11ms
Happstack Lite 7,888 237,474 8.11ms

Java

Framework Requests/sec Total requests Avg Latency
Spark 47,061 1,412,082 1.38ms
Jersey 27,185 816,312 3.72ms
RESTEasy 21,334 641,922 38.08ms

JRuby

Framework Requests/sec Total requests Avg Latency
Roda 21,572 647,576 2.89ms
Cuba 19,744 594,352 3.93ms
NYNY 12,466 374,159 3.20ms
Sinatra 8,683 260,598 11.79ms
Rails 7,302 219,187 12.70ms

Node.JS

Framework Requests/sec Total requests Avg Latency
Express 22,696 683,177 3.15ms
Restify 21,296 641,021 3.27ms
Koa 13,787 413,737 5.00ms
Hapi 6,121 183,882 10.82ms

Python

Framework Requests/sec Total requests Avg Latency
Wheezy Web 20,678 622,462 3.48ms
Pyramid 15,660 463,135 4.47ms
Flask 8,094 242,894 7.99ms
Django 7,549 226,516 8.54ms

Ruby

Framework Requests/sec Total requests Avg Latency
Roda 7,537 226,137 2.12ms
Cuba 5,246 157,422 3.04ms
NYNY 3,671 110,173 4.35ms
Sinatra 2,667 80,134 5.99ms
Rails 2,334 70,108 6.86ms

Rust

Framework Requests/sec Total requests Avg Latency
Iron 38,921 1,167,751 685.06us

Scala

Framework Requests/sec Total requests Avg Latency
Colossus 62,564 1,883,269 1.01ms
http4s 55,982 1,680,049 1.98ms
Spray 51,003 1,534,841 2.23ms
Finatra 47,259 1,418,230 11.54ms
Finch 47,117 1,413,699 10.60ms
Scalatra 29,830 897,903 1.74ms
Play 23,121 695,310 3.27ms
Akka HTTP 13,141 394,707 14.47ms

Methodology

The tests were run on a Retina Macbook Pro i5@2.6GHz and 8GB RAM using wrk:

$ wrk -c 64 -d 30s http://localhost:4000/10

Thanks

  • Wagner Amaral for providing Compjure (Clojure) and Iron (Rust) applications
  • Daniel Konishi for pointing out that Elixir tests should be made with MIX_ENV=production