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-07-18
OS: Linux (version: 5.1.17-300.fc30.x86_64, arch: x86_64)
CPU Cores: 4
1️⃣ nickel (rust)
2️⃣ rack-routing (ruby)
3️⃣ cuba (ruby)
4️⃣ flame (ruby)
5️⃣ iron (rust)
| Language (Runtime) | Framework (Middleware) | Average | 50th percentile | 90th percentile | 99th percentile | 99.9th percentile | Standard deviation |
|---|---|---|---|---|---|---|---|
rust (1.36) |
nickel (0.11) | 0.05 ms | 0.05 ms | 0.05 ms | 0.06 ms | 1.62 ms | 14.67 |
ruby (2.6) |
rack-routing (0.0) | 2.25 ms | 0.19 ms | 3.98 ms | 38.64 ms | 142.07 ms | 7506.33 |
ruby (2.6) |
cuba (3.9) | 1.88 ms | 0.20 ms | 1.76 ms | 35.07 ms | 150.79 ms | 6707.33 |
ruby (2.6) |
flame (4.18) | 3.17 ms | 0.26 ms | 9.88 ms | 46.93 ms | 148.02 ms | 9228.00 |
rust (1.36) |
iron (0.6) | 0.31 ms | 0.26 ms | 0.48 ms | 1.08 ms | 43.75 ms | 505.67 |
ruby (2.6) |
sinatra (2.0) | 4.41 ms | 0.34 ms | 16.34 ms | 51.28 ms | 138.48 ms | 10633.33 |
ruby (2.6) |
roda (3.22) | 1.74 ms | 0.43 ms | 1.44 ms | 31.78 ms | 158.08 ms | 6287.67 |
ruby (2.6) |
hanami (1.3) | 3.56 ms | 0.51 ms | 10.08 ms | 46.34 ms | 171.23 ms | 9268.00 |
ruby (2.6) |
rails (5.2) | 17.89 ms | 1.00 ms | 63.06 ms | 165.21 ms | 472.53 ms | 35723.67 |
rust (nightly) |
rocket (0.4) | 67.45 ms | 2.79 ms | 5.58 ms | 2143.67 ms | 6594.23 ms | 417565.67 |
c (11) |
agoo-c (0.5) | 4.57 ms | 3.58 ms | 9.78 ms | 17.95 ms | 36.15 ms | 3973.67 |
python (3.7) |
japronto (0.1) | 5.42 ms | 4.62 ms | 10.67 ms | 19.50 ms | 47.91 ms | 4236.00 |
java (8) |
rapidoid (5.5) | 7.11 ms | 5.29 ms | 10.48 ms | 24.42 ms | 302.68 ms | 14762.67 |
go (1.12) |
fasthttprouter (0.1) | 5.96 ms | 5.47 ms | 9.05 ms | 15.26 ms | 104.47 ms | 3542.67 |
c (99) |
kore (3.1) | 23.52 ms | 5.56 ms | 12.38 ms | 599.49 ms | 1676.14 ms | 115753.33 |
ruby (2.6) |
agoo (2.8) | 8.63 ms | 6.03 ms | 13.93 ms | 65.42 ms | 92.22 ms | 10686.67 |
cpp (11) |
evhtp (1.2) | 6.41 ms | 6.05 ms | 9.80 ms | 15.63 ms | 117.77 ms | 3561.67 |
java (8) |
act (1.8) | 7.22 ms | 6.08 ms | 11.86 ms | 27.22 ms | 152.00 ms | 5771.00 |
rust (1.36) |
gotham (0.4) | 7.18 ms | 6.30 ms | 12.10 ms | 19.58 ms | 99.77 ms | 4597.33 |
python (3.6) |
vibora (0.0) | 7.37 ms | 6.92 ms | 13.40 ms | 21.79 ms | 52.06 ms | 4865.67 |
crystal (0.29) |
spider-gazelle (1.4) | 7.86 ms | 7.06 ms | 13.05 ms | 20.77 ms | 41.64 ms | 3908.67 |
crystal (0.29) |
router.cr (0.2) | 7.93 ms | 7.12 ms | 13.29 ms | 20.75 ms | 37.29 ms | 3901.00 |
crystal (0.29) |
kemal (0.25) | 40.90 ms | 7.69 ms | 17.94 ms | 792.48 ms | 947.25 ms | 137926.33 |
nim (0.2) |
jester (0.4) | 8.45 ms | 7.96 ms | 12.37 ms | 19.65 ms | 115.61 ms | 3551.00 |
scala (2.12) |
akkahttp (10.1) | 230.63 ms | 8.10 ms | 130.74 ms | 5323.58 ms | 7929.98 ms | 905324.00 |
crystal (0.29) |
raze (0.3) | 8.74 ms | 8.19 ms | 13.35 ms | 19.77 ms | 52.29 ms | 3598.33 |
crystal (0.29) |
orion (1.7) | 513.33 ms | 8.20 ms | 2272.77 ms | 4133.82 ms | 4471.71 ms | 1048698.00 |
rust (1.36) |
actix-web (1.0) | 9.15 ms | 8.67 ms | 14.25 ms | 20.95 ms | 42.27 ms | 3919.33 |
node (12.6) |
polkadot (1.0) | 19.79 ms | 9.21 ms | 18.49 ms | 378.54 ms | 1024.06 ms | 68160.33 |
node (12.6) |
0http (1.0) | 14.40 ms | 9.29 ms | 17.60 ms | 140.71 ms | 790.26 ms | 36947.67 |
go (1.12) |
chi (4.0) | 12.91 ms | 9.49 ms | 21.31 ms | 92.30 ms | 379.32 ms | 19466.00 |
crystal (0.29) |
amber (0.28) | 10.12 ms | 9.51 ms | 15.34 ms | 22.93 ms | 41.85 ms | 4091.67 |
csharp (7.3) |
aspnetcore (2.2) | 12.00 ms | 9.51 ms | 14.24 ms | 62.69 ms | 581.15 ms | 25412.33 |
go (1.12) |
gorouter (4.0) | 12.27 ms | 9.62 ms | 21.41 ms | 69.41 ms | 504.32 ms | 16205.00 |
go (1.12) |
echo (4.1) | 13.38 ms | 9.99 ms | 23.66 ms | 94.03 ms | 385.25 ms | 18190.33 |
go (1.12) |
gin (1.4) | 13.07 ms | 10.05 ms | 24.07 ms | 77.17 ms | 328.45 ms | 15394.00 |
go (1.12) |
violetear (7.0) | 11.23 ms | 10.14 ms | 17.48 ms | 43.04 ms | 174.40 ms | 8424.67 |
go (1.12) |
gorilla-mux (1.7) | 14.28 ms | 10.39 ms | 26.97 ms | 95.69 ms | 273.01 ms | 18190.33 |
go (1.12) |
kami (2.2) | 15.58 ms | 10.65 ms | 27.43 ms | 126.50 ms | 319.63 ms | 22872.00 |
go (1.12) |
beego (1.12) | 16.49 ms | 10.94 ms | 32.93 ms | 125.17 ms | 359.17 ms | 23783.67 |
node (12.6) |
restana (3.3) | 18.45 ms | 11.27 ms | 21.15 ms | 261.19 ms | 901.38 ms | 49934.00 |
node (12.6) |
rayo (1.3) | 29.50 ms | 11.93 ms | 26.67 ms | 609.13 ms | 1487.23 ms | 101945.00 |
php (7.3) |
slim (3.12) | 91.10 ms | 12.21 ms | 214.27 ms | 1747.50 ms | 5998.55 ms | 351297.67 |
php (7.3) |
zend-expressive (3.2) | 69.72 ms | 12.30 ms | 205.96 ms | 853.69 ms | 5173.83 ms | 219778.00 |
go (1.12) |
gf (1.8) | 16.33 ms | 12.49 ms | 31.36 ms | 96.03 ms | 291.06 ms | 18957.67 |
php (7.3) |
zend-framework (3.1) | 85.26 ms | 12.65 ms | 234.79 ms | 1191.12 ms | 7034.48 ms | 304040.00 |
php (7.3) |
symfony (4.3) | 66.28 ms | 12.68 ms | 199.69 ms | 666.34 ms | 4385.67 ms | 195991.33 |
kotlin (1.3) |
ktor (1.2) | 14.53 ms | 12.91 ms | 29.01 ms | 54.02 ms | 296.94 ms | 14877.33 |
php (7.3) |
lumen (5.8) | 67.42 ms | 13.76 ms | 211.53 ms | 659.55 ms | 5963.11 ms | 180988.67 |
python (3.7) |
falcon (2.0) | 17.73 ms | 13.87 ms | 31.84 ms | 56.53 ms | 262.49 ms | 14625.33 |
node (12.6) |
polka (0.5) | 24.78 ms | 14.11 ms | 25.81 ms | 416.47 ms | 1209.86 ms | 73341.67 |
node (12.6) |
muneem (2.4) | 36.94 ms | 14.47 ms | 32.43 ms | 746.56 ms | 1692.59 ms | 123051.33 |
node (12.6) |
fastify (2.6) | 32.04 ms | 15.56 ms | 31.80 ms | 554.30 ms | 1402.31 ms | 93096.33 |
node (12.6) |
koa (2.7) | 40.45 ms | 15.99 ms | 36.77 ms | 831.20 ms | 1917.79 ms | 136242.00 |
java (8) |
spring-boot (2.1) | 22.89 ms | 16.02 ms | 37.79 ms | 79.71 ms | 564.82 ms | 23183.33 |
scala (2.12) |
http4s (0.18) | 42.24 ms | 16.28 ms | 30.97 ms | 884.31 ms | 3062.14 ms | 179606.33 |
swift (5.0) |
perfect (3.1) | 16.29 ms | 16.75 ms | 17.78 ms | 20.06 ms | 291.54 ms | 4697.00 |
node (12.6) |
foxify (0.1) | 44.82 ms | 16.90 ms | 33.90 ms | 950.92 ms | 2038.11 ms | 155047.00 |
php (7.3) |
laravel (5.8) | 94.39 ms | 16.91 ms | 340.52 ms | 849.06 ms | 6257.03 ms | 230157.00 |
python (3.7) |
bottle (0.12) | 23.02 ms | 18.70 ms | 40.30 ms | 75.18 ms | 205.49 ms | 14820.00 |
node (12.6) |
restify (8.2) | 27.10 ms | 18.79 ms | 38.28 ms | 194.76 ms | 983.55 ms | 46944.33 |
node (12.6) |
express (4.17) | 39.53 ms | 19.44 ms | 42.63 ms | 658.47 ms | 1810.62 ms | 113781.67 |
python (3.7) |
blacksheep (0.1) | 23.03 ms | 20.74 ms | 37.20 ms | 58.81 ms | 100.69 ms | 10753.33 |
python (3.7) |
starlette (0.12) | 26.44 ms | 20.91 ms | 33.06 ms | 189.91 ms | 690.90 ms | 41587.33 |
swift (5.0) |
vapor (3.3) | 116.16 ms | 22.15 ms | 51.62 ms | 2484.23 ms | 4852.32 ms | 443831.33 |
python (3.7) |
hug (2.5) | 29.02 ms | 22.17 ms | 46.99 ms | 95.89 ms | 522.65 ms | 23071.00 |
crystal (0.28) |
lucky (0.14) | 27.34 ms | 25.50 ms | 34.95 ms | 40.53 ms | 111.09 ms | 5451.67 |
swift (5.0) |
kitura (2.7) | 26.08 ms | 25.90 ms | 28.99 ms | 35.82 ms | 405.91 ms | 13283.33 |
node (12.6) |
hapi (18.1) | 89.91 ms | 29.73 ms | 57.53 ms | 1698.66 ms | 3259.45 ms | 285430.00 |
crystal (0.29) |
onyx (0.5) | 30.37 ms | 30.13 ms | 38.45 ms | 47.56 ms | 64.16 ms | 6385.33 |
swift (5.0) |
kitura-nio (2.7) | 54.57 ms | 31.77 ms | 55.98 ms | 812.72 ms | 2288.72 ms | 145963.67 |
node (12.6) |
turbo_polka (2.0) | 36.72 ms | 32.38 ms | 34.81 ms | 228.55 ms | 740.86 ms | 42368.33 |
python (3.7) |
fastapi (0.33) | 39.21 ms | 35.50 ms | 53.53 ms | 162.47 ms | 805.67 ms | 40054.67 |
python (3.7) |
molten (0.27) | 52.18 ms | 42.50 ms | 75.56 ms | 142.97 ms | 814.65 ms | 39487.33 |
python (3.7) |
flask (1.1) | 52.89 ms | 45.06 ms | 79.55 ms | 145.50 ms | 684.74 ms | 37258.00 |
python (3.7) |
aiohttp (3.5) | 54.91 ms | 53.75 ms | 80.32 ms | 95.76 ms | 116.13 ms | 16242.00 |
python (3.7) |
bocadillo (0.18) | 57.43 ms | 54.63 ms | 84.38 ms | 124.67 ms | 382.05 ms | 23313.33 |
python (3.7) |
sanic (19.6) | 67.53 ms | 62.05 ms | 107.10 ms | 153.40 ms | 503.30 ms | 37953.33 |
python (3.7) |
quart (0.9) | 93.19 ms | 88.63 ms | 130.62 ms | 156.28 ms | 283.20 ms | 27491.67 |
python (3.7) |
django (2.2) | 155.49 ms | 111.25 ms | 200.39 ms | 1196.07 ms | 2304.25 ms | 203037.67 |
python (3.7) |
responder (1.3) | 133.26 ms | 120.06 ms | 194.49 ms | 278.73 ms | 557.15 ms | 47868.00 |
python (3.7) |
tornado (5.1) | 252.13 ms | 136.98 ms | 170.62 ms | 3439.24 ms | 5971.61 ms | 589485.00 |
python (3.7) |
cyclone (0.0) | 252.41 ms | 152.77 ms | 193.75 ms | 4189.98 ms | 7107.43 ms | 663632.33 |
crystal (0.29) |
athena (0.7) | 190.02 ms | 160.72 ms | 164.73 ms | 1762.03 ms | 3405.64 ms | 280548.00 |
python (3.7) |
masonite (2.2) | 246.30 ms | 178.75 ms | 320.25 ms | 1787.23 ms | 3591.19 ms | 314129.67 |
1️⃣ (agoo-c) (c)
2️⃣ (japronto) (python)
3️⃣ (kore) (c)
4️⃣ (rapidoid) (java)
5️⃣ (fasthttprouter) (go)
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
