This project aims to be a load benchmarking suite, no more, no less
Measuring response times (routing times) for each framework (middleware).
- Helping decide between languages, depending on use case
- Learning languages, best practices, devops culture ...
- Having fun ❤️
- Crystal as
built-intools are made in this language - Docker as frameworks are
isolatedinto containers - wrk as benchmarking tool,
>= 4.1.0
ℹ️ you need wrk stable
git clone --branch 4.1.0 https://github.com/wg/wrkdocker is used for development purpose, production results will be computed on DigitalOcean
- Install all dependencies
shards install- Build internal tools
shards build- Make framework list
bin/make config- Build containers
jobs are either languages (example : crystal) or frameworks (example : router.cr)
bin/neph [job1] [job2] [job3] ...- Start the benchmark ....
tools is a list of language / framework to challenge (example : ruby kemal amber go python)
bin/benchmarker [tools]Last update: 2019-10-01
OS: Linux (version: 5.2.17-200.fc30.x86_64, arch: x86_64)
CPU Cores: 8
1️⃣ nickel (rust)
2️⃣ iron (rust)
3️⃣ syro (ruby)
4️⃣ roda (ruby)
5️⃣ cuba (ruby)
| Language (Runtime) | Framework (Middleware) | Average | 50th percentile | 90th percentile | 99th percentile | 99.9th percentile | Standard deviation |
|---|---|---|---|---|---|---|---|
rust (1.38) |
nickel (0.11) | 0.09 ms | 0.08 ms | 0.13 ms | 0.18 ms | 5.00 ms | 64.33 |
rust (1.38) |
iron (0.6) | 0.50 ms | 0.42 ms | 0.89 ms | 2.05 ms | 27.11 ms | 464.67 |
ruby (2.6) |
syro (3.1) | 2.56 ms | 0.64 ms | 7.29 ms | 16.16 ms | 65.18 ms | 3673.00 |
ruby (2.6) |
roda (3.24) | 2.66 ms | 0.65 ms | 7.58 ms | 18.68 ms | 76.81 ms | 4141.67 |
ruby (2.6) |
cuba (3.9) | 3.14 ms | 0.69 ms | 9.27 ms | 22.31 ms | 95.41 ms | 4970.33 |
ruby (2.6) |
rack-routing (0.0) | 3.62 ms | 0.50 ms | 11.63 ms | 28.21 ms | 71.38 ms | 6221.67 |
node (12.1) |
sifrr (0.0) | 4.05 ms | 3.65 ms | 7.79 ms | 13.32 ms | 38.54 ms | 2848.00 |
c (11) |
agoo-c (0.5) | 4.38 ms | 3.62 ms | 9.55 ms | 16.73 ms | 94.00 ms | 4062.33 |
python (3.7) |
japronto (0.1) | 4.58 ms | 4.13 ms | 8.99 ms | 15.14 ms | 36.85 ms | 3351.33 |
nim (1.0) |
httpbeast (0.2) | 4.71 ms | 4.17 ms | 8.40 ms | 14.00 ms | 32.94 ms | 2817.00 |
cpp (14/17) |
drogon (1.0) | 4.82 ms | 4.41 ms | 8.61 ms | 14.12 ms | 31.44 ms | 2855.67 |
swift (5.1) |
swifter (1.4) | 5.04 ms | 0.91 ms | 14.55 ms | 15.20 ms | 2514.19 ms | 51856.33 |
ruby (2.6) |
flame (4.18) | 5.24 ms | 0.47 ms | 17.56 ms | 43.39 ms | 107.48 ms | 9504.33 |
cpp (11) |
evhtp (1.2) | 5.26 ms | 4.76 ms | 8.76 ms | 14.72 ms | 42.52 ms | 2738.00 |
crystal (0.31) |
toro (0.4) | 5.58 ms | 4.86 ms | 9.59 ms | 15.61 ms | 31.82 ms | 3050.00 |
go (1.13) |
atreugo (8.2) | 5.62 ms | 4.97 ms | 9.07 ms | 16.52 ms | 51.48 ms | 2996.00 |
go (1.13) |
fasthttprouter (0.1) | 5.67 ms | 4.93 ms | 9.23 ms | 17.46 ms | 100.22 ms | 3465.00 |
crystal (0.31) |
router.cr (0.2) | 5.71 ms | 4.94 ms | 9.77 ms | 16.03 ms | 32.64 ms | 3118.00 |
java (8) |
rapidoid (5.5) | 5.71 ms | 4.67 ms | 10.96 ms | 22.83 ms | 112.56 ms | 4928.33 |
go (1.13) |
gorouter-fasthttp (4.1) | 5.84 ms | 5.07 ms | 9.50 ms | 17.96 ms | 57.57 ms | 3292.33 |
crystal (0.31) |
raze (0.3) | 5.86 ms | 5.08 ms | 9.99 ms | 16.20 ms | 33.88 ms | 3165.00 |
crystal (0.31) |
spider-gazelle (1.6) | 6.04 ms | 5.09 ms | 10.66 ms | 17.67 ms | 38.27 ms | 3517.33 |
crystal (0.31) |
kemal (0.28) | 6.13 ms | 5.24 ms | 10.41 ms | 17.22 ms | 37.28 ms | 3321.67 |
ruby (2.6) |
hanami (1.3) | 6.25 ms | 0.81 ms | 19.68 ms | 44.68 ms | 133.44 ms | 10063.00 |
crystal (0.31) |
amber (0.3) | 6.63 ms | 5.70 ms | 11.07 ms | 18.37 ms | 38.64 ms | 3495.67 |
rust (1.38) |
gotham (0.4) | 6.81 ms | 5.53 ms | 11.11 ms | 19.20 ms | 237.60 ms | 7965.33 |
nim (1.0) |
jester (0.4) | 7.15 ms | 6.54 ms | 10.67 ms | 16.56 ms | 46.65 ms | 2920.00 |
crystal (0.31) |
orion (1.7) | 7.19 ms | 6.21 ms | 12.11 ms | 20.39 ms | 40.29 ms | 3888.67 |
ruby (2.6) |
sinatra (2.0) | 7.58 ms | 0.65 ms | 24.86 ms | 55.01 ms | 133.38 ms | 12564.67 |
java (8) |
act (1.8) | 8.21 ms | 7.34 ms | 12.41 ms | 19.87 ms | 219.22 ms | 5980.67 |
ruby (2.6) |
grape (1.2) | 8.73 ms | 0.77 ms | 28.12 ms | 57.23 ms | 115.46 ms | 13625.00 |
go (1.13) |
chi (4.0) | 8.78 ms | 7.45 ms | 14.48 ms | 30.81 ms | 216.12 ms | 6084.67 |
go (1.13) |
gramework (1.6) | 8.97 ms | 7.48 ms | 15.41 ms | 29.82 ms | 130.46 ms | 5619.67 |
ruby (2.6) |
agoo (2.11) | 9.21 ms | 6.07 ms | 15.07 ms | 84.06 ms | 123.42 ms | 12874.33 |
go (1.13) |
echo (4.1) | 9.37 ms | 7.77 ms | 15.77 ms | 34.04 ms | 211.43 ms | 7222.00 |
go (1.13) |
rte (0.0) | 9.55 ms | 7.84 ms | 16.24 ms | 36.92 ms | 135.41 ms | 7091.00 |
rust (1.38) |
actix-web (1.0) | 10.14 ms | 9.84 ms | 13.17 ms | 17.36 ms | 162.10 ms | 4206.00 |
go (1.13) |
gorouter (4.1) | 10.16 ms | 8.14 ms | 17.20 ms | 39.61 ms | 211.93 ms | 9407.67 |
go (1.13) |
violetear (7.0) | 10.40 ms | 8.83 ms | 16.51 ms | 37.27 ms | 139.31 ms | 6650.00 |
go (1.13) |
gin (1.4) | 10.47 ms | 8.46 ms | 18.41 ms | 40.32 ms | 109.45 ms | 7261.00 |
go (1.13) |
kami (2.2) | 10.49 ms | 8.58 ms | 17.73 ms | 41.46 ms | 180.58 ms | 7769.33 |
go (1.13) |
goroute (0.0) | 10.59 ms | 8.28 ms | 18.72 ms | 43.86 ms | 323.04 ms | 9590.67 |
go (1.13) |
beego (1.12) | 11.11 ms | 8.83 ms | 19.45 ms | 45.72 ms | 226.82 ms | 8702.00 |
go (1.13) |
gorilla-mux (1.7) | 11.26 ms | 8.78 ms | 20.68 ms | 45.31 ms | 108.10 ms | 8320.33 |
c (99) |
kore (3.1) | 11.72 ms | 5.24 ms | 10.62 ms | 244.87 ms | 994.59 ms | 55761.67 |
kotlin (1.3) |
ktor (1.2) | 11.78 ms | 10.11 ms | 21.64 ms | 40.07 ms | 331.28 ms | 11149.33 |
go (1.13) |
air (0.13) | 11.85 ms | 9.30 ms | 21.23 ms | 49.00 ms | 195.27 ms | 9237.33 |
swift (5.1) |
perfect (3.1) | 11.91 ms | 12.12 ms | 14.24 ms | 16.59 ms | 102.27 ms | 2367.00 |
python (3.7) |
falcon (2.0) | 12.09 ms | 9.52 ms | 24.22 ms | 45.31 ms | 152.64 ms | 9494.33 |
node (12.1) |
polkadot (1.0) | 13.12 ms | 9.58 ms | 17.92 ms | 80.98 ms | 558.77 ms | 24889.00 |
php (7.3) |
one (1.8) | 13.16 ms | 12.65 ms | 21.41 ms | 32.31 ms | 172.85 ms | 7007.33 |
csharp (7.3) |
aspnetcore (2.2) | 13.22 ms | 9.65 ms | 17.65 ms | 60.77 ms | 723.76 ms | 29184.67 |
node (12.1) |
restana (3.3) | 13.52 ms | 9.98 ms | 19.25 ms | 71.28 ms | 543.36 ms | 22273.67 |
go (1.13) |
gf (1.9) | 13.73 ms | 10.77 ms | 24.71 ms | 55.09 ms | 289.34 ms | 11106.33 |
node (12.1) |
0http (1.2) | 13.77 ms | 9.75 ms | 17.96 ms | 96.27 ms | 621.24 ms | 29091.67 |
python (3.7) |
bottle (0.12) | 15.39 ms | 12.84 ms | 27.90 ms | 45.63 ms | 189.78 ms | 9531.67 |
python (3.7) |
asgineer (0.7) | 16.22 ms | 15.11 ms | 24.43 ms | 33.23 ms | 86.16 ms | 6453.00 |
python (3.7) |
blacksheep (0.1) | 17.17 ms | 16.92 ms | 23.96 ms | 31.56 ms | 78.71 ms | 5602.00 |
java (8) |
spring-boot (2.1) | 17.66 ms | 13.56 ms | 25.11 ms | 79.50 ms | 621.22 ms | 23509.67 |
node (12.1) |
rayo (1.3) | 18.01 ms | 11.32 ms | 21.12 ms | 216.57 ms | 867.72 ms | 46308.00 |
node (12.1) |
polka (0.5) | 18.03 ms | 11.73 ms | 23.53 ms | 189.63 ms | 738.05 ms | 38781.33 |
ruby (2.6) |
plezi (0.16) | 18.95 ms | 16.95 ms | 28.76 ms | 48.75 ms | 94.36 ms | 8040.00 |
python (3.7) |
starlette (0.12) | 19.38 ms | 18.35 ms | 29.45 ms | 38.41 ms | 82.51 ms | 7330.33 |
clojure (1.10) |
coast (1.0) | 19.45 ms | 17.87 ms | 18.39 ms | 23.29 ms | 1249.68 ms | 29221.33 |
php (7.3) |
hyperf (1.0) | 19.72 ms | 12.71 ms | 48.38 ms | 90.28 ms | 199.31 ms | 20036.00 |
node (12.1) |
foxify (0.1) | 20.04 ms | 13.76 ms | 24.08 ms | 208.57 ms | 835.63 ms | 45681.33 |
python (3.7) |
hug (2.6) | 20.57 ms | 15.50 ms | 41.73 ms | 75.33 ms | 260.19 ms | 14683.33 |
scala (2.12) |
http4s (0.18) | 20.77 ms | 17.98 ms | 34.57 ms | 61.16 ms | 949.37 ms | 26649.00 |
node (12.1) |
express (4.17) | 21.85 ms | 16.71 ms | 28.61 ms | 141.50 ms | 829.44 ms | 38313.33 |
node (12.1) |
muneem (2.4) | 22.28 ms | 12.55 ms | 23.05 ms | 374.47 ms | 1084.07 ms | 66858.67 |
node (12.1) |
iotjs-express (0.0) | 22.36 ms | 15.15 ms | 27.02 ms | 254.76 ms | 981.92 ms | 51378.67 |
node (12.1) |
koa (2.8) | 23.46 ms | 14.56 ms | 26.62 ms | 307.22 ms | 1008.87 ms | 59286.67 |
php (7.3) |
swoft (2.0) | 24.34 ms | 22.82 ms | 33.53 ms | 55.98 ms | 94.57 ms | 8188.67 |
node (12.1) |
restify (8.4) | 24.46 ms | 20.35 ms | 26.82 ms | 115.85 ms | 739.90 ms | 32390.00 |
node (12.1) |
fastify (2.8) | 26.49 ms | 14.74 ms | 29.23 ms | 413.33 ms | 1098.28 ms | 70562.67 |
swift (5.1) |
kitura (2.7) | 28.22 ms | 19.68 ms | 21.28 ms | 355.43 ms | 1703.21 ms | 86435.67 |
fsharp (7.3) |
suave (2.5) | 28.56 ms | 12.16 ms | 71.45 ms | 114.34 ms | 452.35 ms | 29554.00 |
php (7.3) |
imi (1.0) | 28.84 ms | 25.28 ms | 39.61 ms | 94.28 ms | 316.89 ms | 15882.00 |
ruby (2.6) |
rails (6.0) | 32.26 ms | 2.45 ms | 106.86 ms | 287.82 ms | 935.64 ms | 61429.33 |
python (3.7) |
fastapi (0.39) | 32.59 ms | 32.21 ms | 47.93 ms | 63.45 ms | 203.45 ms | 11867.67 |
swift (5.1) |
kitura-nio (2.7) | 33.43 ms | 24.04 ms | 36.84 ms | 356.34 ms | 1429.06 ms | 76311.67 |
crystal (0.31) |
lucky (0.16) | 38.05 ms | 36.12 ms | 46.85 ms | 54.88 ms | 274.61 ms | 9315.00 |
swift (5.1) |
vapor (3.3) | 39.22 ms | 17.84 ms | 34.13 ms | 798.10 ms | 2526.43 ms | 142837.33 |
python (3.7) |
molten (0.27) | 40.33 ms | 24.29 ms | 86.81 ms | 120.14 ms | 294.94 ms | 29218.67 |
python (3.7) |
clastic (19.9) | 42.52 ms | 25.82 ms | 100.11 ms | 126.02 ms | 247.57 ms | 31056.00 |
node (12.1) |
moleculer (0.13) | 42.84 ms | 25.49 ms | 42.49 ms | 629.27 ms | 1559.75 ms | 102462.00 |
python (3.7) |
aiohttp (3.6) | 43.00 ms | 39.61 ms | 66.75 ms | 76.38 ms | 150.86 ms | 14660.33 |
node (12.1) |
turbo_polka (2.0) | 43.37 ms | 41.50 ms | 48.49 ms | 54.84 ms | 550.70 ms | 16193.00 |
php (7.3) |
zend-expressive (3.2) | 43.94 ms | 14.42 ms | 81.01 ms | 453.75 ms | 810.97 ms | 90244.00 |
php (7.3) |
symfony (4.3) | 44.03 ms | 14.73 ms | 90.45 ms | 456.06 ms | 721.35 ms | 90414.00 |
node (12.1) |
hapi (18.1) | 44.74 ms | 25.63 ms | 42.05 ms | 685.81 ms | 1588.91 ms | 112316.33 |
python (3.7) |
flask (1.1) | 45.32 ms | 27.47 ms | 104.03 ms | 138.77 ms | 326.54 ms | 32644.33 |
php (7.3) |
slim (4.2) | 46.18 ms | 15.74 ms | 88.26 ms | 475.60 ms | 900.28 ms | 95256.00 |
python (3.7) |
bocadillo (0.18) | 48.14 ms | 47.57 ms | 65.03 ms | 99.50 ms | 262.57 ms | 15801.67 |
php (7.3) |
zend-framework (3.1) | 48.38 ms | 15.52 ms | 95.37 ms | 516.13 ms | 830.49 ms | 103034.00 |
php (7.3) |
basicphp (0.9) | 48.57 ms | 15.75 ms | 89.35 ms | 508.31 ms | 1062.69 ms | 99774.67 |
python (3.7) |
sanic (19.6) | 49.26 ms | 46.70 ms | 74.51 ms | 111.50 ms | 194.62 ms | 19950.00 |
php (7.3) |
lumen (6.0) | 53.21 ms | 16.29 ms | 103.64 ms | 537.09 ms | 1035.32 ms | 104909.00 |
crystal (0.31) |
athena (0.7) | 53.99 ms | 53.09 ms | 61.24 ms | 64.55 ms | 95.78 ms | 5729.00 |
php (7.3) |
spiral (2.1) | 57.25 ms | 56.54 ms | 62.58 ms | 65.71 ms | 476.73 ms | 13822.00 |
java (8) |
javalin (3.4) | 64.11 ms | 9.38 ms | 70.48 ms | 1723.98 ms | 3573.86 ms | 297093.33 |
python (3.7) |
quart (0.10) | 81.23 ms | 83.79 ms | 109.40 ms | 142.15 ms | 217.41 ms | 23091.33 |
php (7.3) |
laravel (6.0) | 83.41 ms | 23.50 ms | 162.42 ms | 985.63 ms | 1622.07 ms | 194856.33 |
python (3.7) |
responder (1.3) | 95.51 ms | 89.12 ms | 152.00 ms | 186.91 ms | 264.74 ms | 32468.00 |
python (3.7) |
tornado (5.1) | 97.37 ms | 95.86 ms | 119.74 ms | 135.07 ms | 904.67 ms | 32233.00 |
python (3.7) |
django (2.2) | 104.70 ms | 96.33 ms | 163.77 ms | 216.60 ms | 1087.78 ms | 51790.00 |
python (3.7) |
masonite (2.2) | 134.33 ms | 110.16 ms | 277.23 ms | 298.24 ms | 783.82 ms | 64981.33 |
scala (2.12) |
akkahttp (10.1) | 203.75 ms | 8.00 ms | 25.37 ms | 5058.29 ms | 7934.62 ms | 854022.00 |
crystal (0.31) |
onyx (0.5) | 204.71 ms | 204.72 ms | 241.84 ms | 273.04 ms | 310.49 ms | 29291.00 |
perl (5.3) |
dancer2 (2.0) | 210.89 ms | 74.13 ms | 389.61 ms | 2546.47 ms | 3040.67 ms | 457339.00 |
1️⃣ (agoo-c) (c)
2️⃣ (sifrr) (node)
3️⃣ (japronto) (python)
4️⃣ (httpbeast) (nim)
5️⃣ (drogon) (cpp)
In any way you want ...
- Request a framework addition
- Report a bug (on any implementation)
- Suggest an idea
- ...
Any kind of idea is ❤️
- Taichiro Suzuki - Author | Maintainer
- OvermindDL1 - Maintainer
- Marwan Rabbâa - Maintainer
