This project aims to be a load benchmarking suite, no more, no less
Measuring response times (routing times) for each framework (middleware).
Results are not production-ready yet
- 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 - postgresql to store data,
>= 10
ℹ️ 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- Create and initialize the database
createdb -U postgres benchmark
psql -U postgres -d benchmark < .ci/dump.sql
export DATABASE_URL="postgresql://postgres@localhost/benchmark"- Make configuration
bin/make config- Build containers
jobs are either languages (example : crystal) or frameworks (example : router.cr)
bin/neph [job1] [job2] [job3] ...- Export all results readme
bin/db to_readmeℹ️ Updated on 2020-01-23 18:06:56 +01:00 ℹ️
| Language | Framework | Speed (req/s) |
Horizontal scale (parallelism) | Vertical scale (concurrency) | |
|---|---|---|---|---|---|
| 1 | nim (1.0) | httpbeast (0.2) | 194 307 | ||
| 2 | javascript (12.13) | nanoexpress (1.1) | 189 928 | ||
| 3 | javascript (12.13) | sifrr (0.0) | 184 732 | ||
| 4 | c (11) | agoo-c (0.7) | 181 843 | ||
| 5 | go (1.13) | fasthttp (1.8) | 170 458 | ||
| 6 | java (8) | rapidoid (5.5) | 165 999 | ||
| 7 | go (1.13) | router (1.6) | 164 561 | ||
| 8 | go (1.13) | fasthttprouter (0.1) | 163 995 | ||
| 9 | go (1.13) | fiber (1.0) | 162 757 | ||
| 10 | crystal (0.31) | router.cr (0.2) | 161 198 | ||
| 11 | go (1.13) | atreugo (10.1) | 160 859 | ||
| 12 | go (1.13) | gorouter-fasthttp (4.2) | 159 726 | ||
| 13 | crystal (0.31) | toro (0.4) | 158 556 | ||
| 14 | crystal (0.31) | raze (0.3) | 156 002 | ||
| 15 | c (11) | kore (3.3) | 155 531 | ||
| 16 | crystal (0.31) | spider-gazelle (2.3) | 154 542 | ||
| 17 | nim (1.0) | jester (0.4) | 150 807 | ||
| 18 | crystal (0.31) | kemal (0.26) | 148 420 | ||
| 19 | crystal (0.31) | grip (0.26) | 144 828 | ||
| 20 | crystal (0.31) | amber (0.3) | 139 672 | ||
| 21 | crystal (0.31) | orion (2.1) | 131 955 | ||
| 22 | ruby (2.6) | agoo (2.12) | 128 913 | ||
| 23 | php (7.4) | workerman (3.5) | 128 672 | ||
| 24 | go (1.13) | rte (0.0) | 110 126 | ||
| 25 | go (1.13) | gorouter (4.3) | 107 062 | ||
| 26 | java (8) | act (1.8) | 106 691 | ||
| 27 | go (1.13) | aero (1.3) | 103 516 | ||
| 28 | go (1.13) | kami (2.2) | 103 050 | ||
| 29 | go (1.13) | chi (4.0) | 102 502 | ||
| 30 | go (1.13) | beego (1.12) | 99 451 | ||
| 31 | go (1.13) | violetear (7.0) | 98 885 | ||
| 32 | go (1.13) | echo (4.1) | 98 790 | ||
| 33 | go (1.13) | goroute (0.0) | 98 209 | ||
| 34 | go (1.13) | gin (1.5) | 97 695 | ||
| 35 | csharp (7.3) | aspnetcore (3.0) | 97 581 | ||
| 36 | go (1.13) | gorilla-mux (1.7) | 95 769 | ||
| 37 | go (1.13) | webgo (3.0) | 93 422 | ||
| 38 | cpp (11) | drogon (1.0) | 91 568 | ||
| 39 | javascript (12.13) | polkadot (1.0) | 90 949 | ||
| 40 | javascript (12.13) | 0http (2.2) | 87 389 | ||
| 41 | go (1.13) | air (0.14) | 85 343 | ||
| 42 | javascript (12.13) | restana (4.0) | 82 226 | ||
| 43 | swift (5.1) | perfect (3.1) | 80 329 | ||
| 44 | go (1.13) | gf (1.11) | 79 901 | ||
| 45 | javascript (12.13) | polka (0.5) | 78 218 | ||
| 46 | javascript (12.13) | rayo (1.3) | 76 576 | ||
| 47 | python (3.8) | falcon (2.0) | 76 432 | ||
| 48 | javascript (12.13) | muneem (2.4) | 65 866 | ||
| 49 | go (1.13) | mars (1.0) | 64 951 | ||
| 50 | javascript (12.13) | foxify (0.1) | 62 511 | ||
| 51 | javascript (12.13) | fastify (2.11) | 62 291 | ||
| 52 | php (7.4) | one (1.9) | 61 953 | ||
| 53 | python (3.8) | bottle (0.12) | 61 950 | ||
| 54 | python (3.8) | asgineer (0.7) | 57 596 | ||
| 55 | javascript (12.13) | koa (2.11) | 54 406 | ||
| 56 | swift (5.1) | kitura-nio (2.8) | 53 413 | ||
| 57 | python (3.8) | blacksheep (0.2) | 53 090 | ||
| 58 | javascript (12.13) | iotjs-express (0.0) | 52 924 | ||
| 59 | clojure (1.10) | coast (1.0) | 52 545 | ||
| 60 | java (8) | javalin (3.5) | 52 214 | ||
| 61 | swift (5.1) | vapor (3.3) | 50 634 | ||
| 62 | rust (1.4) | gotham (0.4) | 50 079 | ||
| 63 | kotlin (1.3) | ktor (1.2) | 49 735 | ||
| 64 | swift (5.1) | kitura (2.8) | 49 594 | ||
| 65 | php (7.4) | hyperf (1.0) | 49 265 | ||
| 66 | python (3.8) | pyramid (1.1) | 49 074 | ||
| 67 | javascript (12.13) | express (4.17) | 48 400 | ||
| 68 | python (3.8) | starlette (0.13) | 47 381 | ||
| 69 | scala (2.12) | akkahttp (10.1) | 46 696 | ||
| 70 | python (3.8) | hug (2.6) | 46 424 | ||
| 71 | cpp (11) | evhtp (1.2) | 44 628 | ||
| 72 | php (7.4) | imi (1.0) | 43 021 | ||
| 73 | php (7.4) | sw-fw-less (preview) | 42 504 | ||
| 74 | java (8) | spring-boot (2.1) | 41 032 | ||
| 75 | fsharp (7.3) | suave (2.5) | 36 576 | ||
| 76 | php (7.4) | swoft (2.0) | 35 856 | ||
| 77 | ruby (2.6) | cuba (3.9) | 34 464 | ||
| 78 | javascript (12.13) | restify (8.5) | 34 188 | ||
| 79 | java (8) | micronaut (1.2) | 33 761 | ||
| 80 | rust (1.4) | nickel (0.11) | 33 692 | ||
| 81 | ruby (2.6) | roda (3.28) | 32 207 | ||
| 82 | ruby (2.6) | syro (3.1) | 31 996 | ||
| 83 | javascript (12.13) | hapi (19.0) | 31 561 | ||
| 84 | python (3.8) | responder (2.0) | 31 122 | ||
| 85 | python (3.8) | fastapi (0.47) | 30 765 | ||
| 86 | ruby (2.6) | rack-routing (0.0) | 28 867 | ||
| 87 | scala (2.12) | http4s (0.18) | 28 553 | ||
| 88 | python (3.8) | aiohttp (3.6) | 27 091 | ||
| 89 | javascript (12.13) | moleculer (0.13) | 27 017 | ||
| 90 | crystal (0.31) | lucky (0.18) | 26 672 | ||
| 91 | python (3.8) | clastic (19.9) | 26 598 | ||
| 92 | python (3.8) | molten (0.27) | 25 757 | ||
| 93 | ruby (2.6) | camping (2.1) | 25 626 | ||
| 94 | crystal (0.31) | athena (0.7) | 24 582 | ||
| 95 | python (3.8) | flask (1.1) | 24 508 | ||
| 96 | python (3.8) | masonite (2.3) | 24 380 | ||
| 97 | javascript (12.13) | turbo_polka (0.3) | 23 334 | ||
| 98 | ruby (2.6) | flame (4.18) | 22 062 | ||
| 99 | ruby (2.6) | plezi (0.16) | 20 943 | ||
| 100 | python (3.8) | sanic (19.12) | 19 866 | ||
| 101 | python (3.8) | emmett (2.0.0a1) | 19 659 | ||
| 102 | python (3.8) | bocadillo (0.18) | 19 547 | ||
| 103 | java (8) | spring-framework (5.2) | 18 174 | ||
| 104 | ruby (2.6) | hanami (1.3) | 18 002 | ||
| 105 | php (7.4) | spiral (2.4) | 17 488 | ||
| 106 | rust (1.4) | iron (0.6) | 17 357 | ||
| 107 | ruby (2.6) | sinatra (2.0) | 14 450 | ||
| 108 | ruby (2.6) | grape (1.3) | 13 790 | ||
| 109 | python (3.8) | quart (0.10) | 12 284 | ||
| 110 | python (3.8) | django (3.0) | 10 468 | ||
| 111 | python (3.8) | tornado (6.0) | 10 277 | ||
| 112 | go (1.13) | gramework (1.7) | 9 822 | ||
| 113 | python (3.8) | cherrypy (18.5) | 9 156 | ||
| 114 | php (7.4) | ubiquity (2.3) | 8 473 | ||
| 115 | php (7.4) | one-fpm (1.9) | 8 031 | ||
| 116 | swift (5.1) | swifter (1.4) | 7 746 | ||
| 117 | php (7.4) | phalcon (4.0) | 7 484 | ||
| 118 | php (7.4) | hamlet (3.2) | 7 355 | ||
| 119 | crystal (0.31) | onyx (0.5) | 4 883 | ||
| 120 | php (7.4) | slim (4.4) | 4 330 | ||
| 121 | php (7.4) | lumen (6.3) | 4 152 | ||
| 122 | ruby (2.6) | rails (6.0) | 3 766 | ||
| 123 | php (7.4) | zend-expressive (3.2) | 3 515 | ||
| 124 | php (7.4) | symfony (4.3) | 3 339 | ||
| 125 | php (7.4) | laravel (6.11) | 3 084 | ||
| 126 | perl (5.3) | dancer2 (2.0) | 2 908 | ||
| 127 | php (7.4) | basicphp (0.9) | 2 608 | ||
| 128 | python (3.8) | cyclone (1.3) | 2 349 | ||
| 129 | php (7.4) | zend-framework (3.1) | 2 001 | ||
| 130 | python (3.8) | klein (19.6) | 1 533 | ||
| 131 | python (3.8) | nameko (2.12) | 1 440 | ||
| 132 | julia (1.3) | merly (0.2) | 932 |
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