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-in
tools are made in this language - Docker as frameworks are
isolated
into 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/wrk
docker
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-02-09 ℹ️
Benchmarking with wrk
- Threads : 8
- Timeout : 8
- Connections : 64
- Duration : 5s (seconds)
Language | Framework | Speed (req/s ) |
Horizontal scale (parallelism) | Vertical scale (concurrency) | |
---|---|---|---|---|---|
1 | nim (1.0) | httpbeast (0.2) | 835 774 | ||
2 | nim (1.0) | jester (0.4) | 662 703 | ||
3 | go (1.13) | fiber (1.4) | 595 885 | ||
4 | go (1.13) | gorouter-fasthttp (4.4) | 565 630 | ||
5 | javascript (13.7) | sifrr (0.0) | 489 521 | ||
6 | javascript (13.7) | nanoexpress (1.1) | 472 886 | ||
7 | c (11) | agoo-c (0.7) | 458 575 | ||
8 | java (8) | rapidoid (5.5) | 421 790 | ||
9 | go (1.13) | fasthttp (1.9) | 420 498 | ||
10 | go (1.13) | atreugo (10.3) | 404 720 | ||
11 | go (1.13) | fasthttprouter (0.1) | 402 119 | ||
12 | go (1.13) | router (0.6) | 400 968 | ||
13 | go (1.13) | gorouter (4.4) | 391 965 | ||
14 | go (1.13) | beego (1.12) | 359 279 | ||
15 | php (7.4) | workerman (3.5) | 349 897 | ||
16 | crystal (0.32) | toro (0.4) | 335 812 | ||
17 | crystal (0.32) | router.cr (0.2) | 326 159 | ||
18 | crystal (0.32) | spider-gazelle (2.3) | 314 973 | ||
19 | crystal (0.32) | raze (0.3) | 312 842 | ||
20 | c (11) | kore (3.3) | 303 289 | ||
21 | ruby (2.6) | agoo (2.12) | 297 706 | ||
22 | go (1.13) | rte (0.0) | 294 527 | ||
23 | crystal (0.32) | kemal (0.26) | 290 214 | ||
24 | crystal (0.32) | grip (0.27) | 285 013 | ||
25 | java (8) | act (1.8) | 282 000 | ||
26 | go (1.13) | chi (4.0) | 274 507 | ||
27 | crystal (0.32) | amber (0.3) | 273 108 | ||
28 | go (1.13) | kami (2.2) | 269 892 | ||
29 | go (1.13) | aero (1.3) | 269 668 | ||
30 | go (1.13) | goroute (0.0) | 269 492 | ||
31 | go (1.13) | violetear (7.0) | 267 839 | ||
32 | csharp (8.0) | aspnetcore (3.1) | 263 725 | ||
33 | go (1.13) | gorilla-mux (1.7) | 263 585 | ||
34 | go (1.13) | echo (4.1) | 262 940 | ||
35 | crystal (0.32) | orion (2.1) | 260 004 | ||
36 | go (1.13) | gin (1.5) | 252 895 | ||
37 | go (1.13) | webgo (3.0) | 249 397 | ||
38 | javascript (13.7) | polkadot (1.0) | 244 917 | ||
39 | elixir (1.1) | cowboy_stream (2.7) | 243 455 | ||
40 | cpp (11) | drogon (1.0) | 241 443 | ||
41 | javascript (13.7) | 0http (2.2) | 233 822 | ||
42 | go (1.13) | air (0.14) | 228 563 | ||
43 | javascript (13.7) | restana (4.0) | 228 022 | ||
44 | javascript (13.7) | polka (0.5) | 221 291 | ||
45 | swift (5.1) | perfect (3.1) | 218 634 | ||
46 | javascript (13.7) | rayo (1.3) | 218 426 | ||
47 | python (3.8) | falcon (2.0) | 208 805 | ||
48 | go (1.13) | gf (1.11) | 206 225 | ||
49 | clojure (1.1) | coast (1.0) | 189 598 | ||
50 | javascript (13.7) | muneem (2.4) | 188 038 | ||
51 | javascript (13.7) | fastify (2.12) | 177 372 | ||
52 | python (3.8) | apidaora (0.12) | 173 521 | ||
53 | go (1.13) | mars (1.0) | 173 088 | ||
54 | javascript (13.7) | foxify (0.1) | 172 318 | ||
55 | python (3.8) | bottle (0.12) | 168 776 | ||
56 | php (7.4) | one (1.9) | 167 430 | ||
57 | rust (1.41) | gotham (0.4) | 166 149 | ||
58 | java (8) | javalin (3.5) | 165 296 | ||
59 | scala (2.12) | akkahttp (10.1) | 162 980 | ||
60 | kotlin (1.3) | ktor (1.2) | 162 842 | ||
61 | elixir (1.1) | cowboy (2.7) | 160 063 | ||
62 | javascript (13.7) | koa (2.11) | 159 032 | ||
63 | python (3.8) | asgineer (0.7) | 158 623 | ||
64 | javascript (13.7) | iotjs-express (0.0) | 156 373 | ||
65 | rust (1.41) | nickel (0.11) | 151 448 | ||
66 | python (3.8) | blacksheep (0.2) | 148 228 | ||
67 | swift (5.1) | kitura (2.8) | 147 268 | ||
68 | swift (5.1) | kitura-nio (2.8) | 146 242 | ||
69 | swift (5.1) | vapor (3.3) | 145 804 | ||
70 | crystal (0.32) | athena (0.8) | 143 779 | ||
71 | elixir (1.1) | plug (1.8) | 142 134 | ||
72 | python (3.8) | pyramid (1.1) | 138 729 | ||
73 | javascript (13.7) | express (4.17) | 138 075 | ||
74 | php (7.4) | hyperf (1.0) | 137 492 | ||
75 | python (3.8) | hug (2.6) | 133 790 | ||
76 | python (3.8) | starlette (0.13) | 133 342 | ||
77 | cpp (11) | evhtp (1.2) | 127 793 | ||
78 | java (8) | spring-boot (2.1) | 124 727 | ||
79 | elixir (1.1) | phoenix (1.4) | 122 609 | ||
80 | php (7.4) | sw-fw-less (preview) | 120 673 | ||
81 | java (8) | micronaut (1.2) | 119 892 | ||
82 | php (7.4) | imi (1.0) | 119 808 | ||
83 | ruby (2.6) | syro (3.1) | 117 498 | ||
84 | scala (2.12) | http4s (0.18) | 115 527 | ||
85 | ruby (2.6) | roda (3.28) | 114 060 | ||
86 | javascript (13.7) | hapi (19.1) | 110 292 | ||
87 | javascript (13.7) | restify (8.5) | 107 058 | ||
88 | php (7.4) | swoft (2.0) | 106 268 | ||
89 | ruby (2.6) | cuba (3.9) | 102 918 | ||
90 | python (3.8) | responder (2.0) | 87 972 | ||
91 | ruby (2.6) | rack-routing (0.0) | 87 227 | ||
92 | python (3.8) | fastapi (0.48) | 87 098 | ||
93 | javascript (13.7) | moleculer (0.13) | 83 775 | ||
94 | fsharp (4.7) | suave (2.5) | 83 321 | ||
95 | python (3.8) | molten (0.27) | 78 286 | ||
96 | python (3.8) | clastic (19.9) | 75 842 | ||
97 | python (3.8) | aiohttp (3.6) | 74 756 | ||
98 | ruby (2.6) | camping (2.1) | 71 020 | ||
99 | rust (1.41) | iron (0.6) | 71 016 | ||
100 | python (3.8) | masonite (2.3) | 68 640 | ||
101 | java (8) | spring-framework (5.2) | 68 254 | ||
102 | javascript (13.7) | turbo_polka (0.3) | 67 513 | ||
103 | python (3.8) | flask (1.1) | 67 210 | ||
104 | ruby (2.6) | flame (4.18) | 65 943 | ||
105 | python (3.8) | sanic (19.12) | 61 314 | ||
106 | ruby (2.6) | plezi (0.16) | 60 399 | ||
107 | python (3.8) | emmett (2.0.0a1) | 59 638 | ||
108 | crystal (0.32) | lucky (0.18) | 56 184 | ||
109 | ruby (2.6) | hanami (1.3) | 53 007 | ||
110 | php (7.4) | spiral (2.4) | 50 172 | ||
111 | python (3.8) | quart (0.11) | 49 379 | ||
112 | ruby (2.6) | sinatra (2.0) | 47 718 | ||
113 | ruby (2.6) | grape (1.3) | 36 520 | ||
114 | python (3.8) | tornado (6.0) | 30 666 | ||
115 | swift (5.1) | swifter (1.4) | 30 463 | ||
116 | python (3.8) | django (3.0) | 30 203 | ||
117 | go (1.13) | gramework (1.7) | 29 935 | ||
118 | python (3.8) | cherrypy (18.5) | 26 449 | ||
119 | php (7.4) | ubiquity (2.3) | 25 909 | ||
120 | php (7.4) | one-fpm (1.9) | 22 730 | ||
121 | php (7.4) | phalcon (4.0) | 20 808 | ||
122 | php (7.4) | hamlet (3.2) | 20 650 | ||
123 | crystal (0.32) | onyx (0.5) | 16 026 | ||
124 | perl (5.3) | dancer2 (2.0) | 14 484 | ||
125 | php (7.4) | slim (4.4) | 13 375 | ||
126 | julia (1.3) | merly (0.2) | 12 933 | ||
127 | php (7.4) | lumen (6.3) | 12 446 | ||
128 | php (7.4) | yii (2.0) | 12 224 | ||
129 | ruby (2.6) | rails (6.0) | 11 154 | ||
130 | php (7.4) | zend-expressive (3.2) | 10 340 | ||
131 | php (7.4) | symfony (4.3) | 9 760 | ||
132 | python (3.8) | cyclone (1.3) | 7 032 | ||
133 | php (7.4) | zend-framework (3.1) | 5 636 | ||
134 | php (7.4) | basicphp (0.9) | 4 613 | ||
135 | python (3.8) | klein (19.6) | 4 573 | ||
136 | python (3.8) | nameko (2.12) | 4 510 | ||
137 | php (7.4) | laravel (6.14) | 1 290 | ||
138 | nim (1.0) | phoon (0.1) | 15 |
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