
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 ⚠️
- Create and initialize the database
createdb -U postgres benchmark
psql -U postgres -d benchmark < .ci/dump.sql
Docker can be used to set up the database:
docker run -it --rm -d \
-p 5432:5432 \
-e POSTGRES_DB=benchmark \
-e POSTGRES_HOST_AUTH_METHOD=trust \
-v /tmp/pg-data:/var/lib/postgresql/data \
--name pg postgres:12-alpine
Wait several seconds for the container to start, then inject the dump:
docker exec pg sh -c "echo \"$(cat .ci/dump.sql)\" | psql -U postgres -d benchmark"
After creating the database, export its URL:
export DATABASE_URL="postgresql://postgres@localhost/benchmark"
jobs are either languages (example : crystal) or frameworks (example : router.cr)
bin/neph [job1] [job2] [job3] ...
- Export all results readme
ℹ️ Updated on 2020-04-17 ℹ️
Benchmarking with wrk
- Threads : 8
- Timeout : 8
- Duration : 15s (seconds)
ℹ️ Sorted by max req/s on concurrency 64 ℹ️
|
Language |
Framework |
Speed (64) |
Speed (256) |
Speed (512) |
Speed (1024) |
Speed (2048) |
| 1 |
nim (1.0) |
httpbeast (2.2) |
192 169 |
205 111 |
206 613 |
204 103 |
204 379 |
| 2 |
javascript (13.12) |
nanoexpress-pro (1.11) |
180 619 |
193 235 |
191 953 |
188 442 |
189 058 |
| 3 |
php (7.4) |
simps (1.0) |
174 627 |
186 057 |
187 838 |
185 407 |
185 371 |
| 4 |
javascript (13.12) |
nanoexpress (2.0) |
170 542 |
182 163 |
182 019 |
178 503 |
178 342 |
| 5 |
javascript (13.12) |
sifrr (0.0) |
168 331 |
173 032 |
181 641 |
179 924 |
180 822 |
| 6 |
go (1.14) |
fasthttp (1.1) |
159 485 |
169 040 |
172 132 |
167 238 |
167 197 |
| 7 |
crystal (0.34) |
toro (0.4) |
153 719 |
160 140 |
158 804 |
150 865 |
149 687 |
| 8 |
go (1.14) |
router (1.0) |
153 219 |
161 937 |
165 143 |
160 925 |
161 044 |
| 9 |
go (1.14) |
atreugo (11.0) |
152 677 |
161 664 |
165 469 |
160 879 |
160 457 |
| 10 |
go (1.14) |
fasthttprouter (0.1) |
152 478 |
161 979 |
165 406 |
160 540 |
160 466 |
| 11 |
crystal (0.34) |
ricr (0.1) |
152 423 |
159 153 |
155 157 |
147 257 |
146 240 |
| 12 |
go (1.14) |
gorouter-fasthttp (4.4) |
152 328 |
158 268 |
165 050 |
159 737 |
158 936 |
| 13 |
crystal (0.34) |
router.cr (0.2) |
151 800 |
158 741 |
156 106 |
147 501 |
147 585 |
| 14 |
nim (1.0) |
jester (0.4) |
150 825 |
161 481 |
162 592 |
159 133 |
159 462 |
| 15 |
crystal (0.34) |
spider-gazelle (2.3) |
149 437 |
156 362 |
153 392 |
145 053 |
144 424 |
| 16 |
go (1.14) |
fiber (1.9) |
145 769 |
156 494 |
153 772 |
145 749 |
146 151 |
| 17 |
crystal (0.34) |
kemal (0.26) |
143 325 |
150 039 |
145 983 |
138 471 |
137 303 |
| 18 |
crystal (0.34) |
grip (0.28) |
143 181 |
149 768 |
145 599 |
137 536 |
135 822 |
| 19 |
php (7.4) |
workerman (4.0) |
142 725 |
154 433 |
156 053 |
153 756 |
153 305 |
| 20 |
java (8) |
rapidoid (5.5) |
142 028 |
158 419 |
161 180 |
162 537 |
159 496 |
| 21 |
crystal (0.34) |
amber (0.34) |
136 180 |
141 277 |
137 718 |
129 471 |
128 679 |
| 22 |
rust (1.42) |
actix (2.0) |
134 197 |
136 409 |
138 322 |
134 614 |
131 010 |
| 23 |
crystal (0.34) |
lucky (0.2) |
131 391 |
134 957 |
129 044 |
119 699 |
119 260 |
| 24 |
crystal (0.34) |
orion (2.3) |
131 218 |
135 092 |
129 831 |
119 342 |
117 257 |
| 25 |
c (99) |
kore (3.3) |
126 052 |
119 837 |
136 098 |
139 608 |
138 209 |
| 26 |
crystal (0.34) |
athena (0.8) |
125 584 |
127 945 |
121 686 |
108 984 |
109 303 |
| 27 |
java (8) |
act (1.8) |
115 075 |
125 342 |
119 923 |
115 924 |
123 996 |
| 28 |
go (1.14) |
rte (0.0) |
109 045 |
109 244 |
112 880 |
112 540 |
112 010 |
| 29 |
go (1.14) |
httprouter (1.3) |
107 140 |
107 583 |
110 449 |
110 222 |
109 766 |
| 30 |
go (1.14) |
chi (4.1) |
103 255 |
102 584 |
105 577 |
104 928 |
104 879 |
| 31 |
go (1.14) |
gorouter (4.4) |
103 136 |
107 573 |
110 003 |
108 904 |
108 317 |
| 32 |
c (11) |
agoo-c (0.7) |
102 766 |
166 923 |
162 687 |
172 659 |
161 927 |
| 33 |
go (1.14) |
aero (1.3) |
100 339 |
101 606 |
104 574 |
104 111 |
103 556 |
| 34 |
go (1.14) |
violetear (7.0) |
99 722 |
99 994 |
103 131 |
103 376 |
102 791 |
| 35 |
go (1.14) |
echo (4.1) |
98 438 |
97 534 |
100 646 |
100 860 |
100 621 |
| 36 |
go (1.14) |
goroute (0.0) |
98 176 |
97 822 |
100 408 |
100 407 |
100 085 |
| 37 |
go (1.14) |
kami (2.2) |
97 683 |
101 844 |
103 589 |
102 026 |
101 638 |
| 38 |
go (1.14) |
gorilla-mux (1.7) |
95 842 |
94 587 |
97 627 |
97 772 |
97 401 |
| 39 |
ruby (2.7) |
agoo (2.12) |
94 897 |
118 122 |
122 532 |
123 295 |
123 026 |
| 40 |
go (1.14) |
beego (1.12) |
94 812 |
98 509 |
101 170 |
101 135 |
100 664 |
| 41 |
go (1.14) |
gin (1.6) |
93 792 |
98 036 |
100 601 |
99 992 |
99 610 |
| 42 |
go (1.14) |
webgo (3.0) |
93 444 |
93 242 |
96 237 |
96 445 |
96 227 |
| 43 |
csharp (8.0) |
aspnetcore (3.1) |
93 440 |
99 556 |
100 126 |
98 612 |
99 627 |
| 44 |
cpp (14/17) |
drogon (1.0) |
87 792 |
91 222 |
94 116 |
93 403 |
92 975 |
| 45 |
javascript (13.12) |
polkadot (1.0) |
86 353 |
95 692 |
94 841 |
91 076 |
90 598 |
| 46 |
javascript (13.12) |
0http (2.2) |
82 492 |
91 525 |
90 991 |
87 741 |
86 986 |
| 47 |
go (1.14) |
air (0.15) |
80 644 |
85 086 |
86 932 |
86 787 |
86 582 |
| 48 |
javascript (13.12) |
restana (4.3) |
79 275 |
86 738 |
84 162 |
84 010 |
83 796 |
| 49 |
javascript (13.12) |
polka (0.5) |
77 630 |
82 641 |
80 336 |
77 371 |
77 257 |
| 50 |
javascript (13.12) |
rayo (1.3) |
76 277 |
80 959 |
78 806 |
76 214 |
76 163 |
| 51 |
go (1.14) |
gf (1.12) |
75 280 |
81 061 |
82 619 |
82 036 |
81 601 |
| 52 |
scala (2.12) |
akkahttp (10.1) |
74 040 |
79 101 |
75 665 |
74 287 |
75 495 |
| 53 |
java (8) |
javalin (3.5) |
70 925 |
76 527 |
77 817 |
76 894 |
76 390 |
| 54 |
python (3.8) |
falcon (2.0) |
70 635 |
75 758 |
76 244 |
75 013 |
74 581 |
| 55 |
swift (5.1) |
perfect (3.1) |
70 112 |
79 261 |
84 327 |
84 040 |
84 362 |
| 56 |
kotlin (1.3) |
ktor (1.2) |
65 241 |
75 645 |
77 473 |
76 394 |
76 086 |
| 57 |
php (7.4) |
hyperf (1.1) |
65 010 |
68 710 |
68 988 |
68 450 |
68 612 |
| 58 |
java (8) |
spring-boot (2.1) |
64 989 |
69 684 |
67 229 |
66 053 |
67 623 |
| 59 |
php (7.4) |
one (2.0) |
63 964 |
66 923 |
67 404 |
67 008 |
66 737 |
| 60 |
javascript (13.12) |
fastify (2.13) |
63 877 |
67 289 |
64 937 |
64 532 |
63 233 |
| 61 |
java (8) |
micronaut (1.2) |
63 536 |
70 960 |
70 921 |
67 858 |
68 425 |
| 62 |
javascript (13.12) |
muneem (2.4) |
63 420 |
67 722 |
65 978 |
63 883 |
63 258 |
| 63 |
elixir (1.1) |
cowboy_stream (2.7) |
63 393 |
63 547 |
62 705 |
61 053 |
61 076 |
| 64 |
javascript (13.12) |
foxify (0.1) |
62 427 |
65 917 |
63 954 |
62 861 |
62 446 |
| 65 |
go (1.14) |
mars (1.0) |
61 077 |
64 311 |
67 129 |
66 737 |
66 492 |
| 66 |
python (3.8) |
bottle (0.12) |
57 847 |
62 602 |
63 441 |
62 389 |
60 002 |
| 67 |
javascript (13.12) |
koa (2.11) |
55 941 |
59 235 |
56 648 |
56 775 |
56 597 |
| 68 |
rust (1.42) |
nickel (0.11) |
55 823 |
55 736 |
55 157 |
55 926 |
55 783 |
| 69 |
javascript (13.12) |
iotjs-express (0.0) |
55 766 |
58 457 |
56 557 |
55 133 |
55 044 |
| 70 |
clojure (1.1) |
coast (1.0) |
54 360 |
55 693 |
55 577 |
55 156 |
55 293 |
| 71 |
python (3.8) |
apidaora (0.25) |
54 208 |
56 754 |
57 195 |
56 824 |
56 656 |
| 72 |
java (8) |
spring-framework (5.2) |
53 477 |
59 317 |
59 507 |
59 503 |
58 694 |
| 73 |
python (3.8) |
asgineer (0.7) |
52 200 |
57 562 |
57 577 |
55 594 |
55 419 |
| 74 |
scala (2.12) |
http4s (0.18) |
52 185 |
60 137 |
62 400 |
62 451 |
63 372 |
| 75 |
javascript (13.12) |
feathersjs (4.5) |
50 760 |
52 873 |
51 711 |
50 852 |
50 644 |
| 76 |
python (3.8) |
pyramid (1.1) |
49 664 |
50 001 |
48 935 |
49 749 |
49 690 |
| 77 |
javascript (13.12) |
express (4.17) |
49 482 |
52 223 |
50 118 |
50 012 |
50 331 |
| 78 |
swift (5.1) |
vapor (3.3) |
49 249 |
50 479 |
49 549 |
50 164 |
49 642 |
| 79 |
swift (5.1) |
kitura (2.8) |
49 028 |
48 496 |
47 727 |
48 099 |
47 796 |
| 80 |
javascript (13.12) |
moleculer (0.14) |
47 002 |
48 540 |
46 886 |
46 205 |
46 403 |
| 81 |
swift (5.1) |
kitura-nio (2.8) |
46 675 |
45 651 |
44 049 |
45 750 |
45 333 |
| 82 |
python (3.8) |
blacksheep (0.2) |
46 645 |
51 761 |
50 172 |
48 321 |
49 019 |
| 83 |
cpp (11) |
evhtp (1.2) |
46 525 |
46 435 |
46 303 |
46 560 |
45 539 |
| 84 |
python (3.8) |
hug (2.6) |
45 221 |
48 106 |
48 191 |
47 818 |
47 986 |
| 85 |
python (3.8) |
starlette (0.13) |
43 748 |
47 909 |
47 800 |
46 464 |
46 139 |
| 86 |
rust (1.42) |
gotham (0.4) |
42 186 |
50 412 |
52 019 |
53 192 |
53 706 |
| 87 |
elixir (1.1) |
cowboy (2.7) |
40 820 |
41 530 |
41 182 |
39 922 |
40 024 |
| 88 |
php (7.4) |
imi (1.0) |
40 119 |
41 669 |
42 237 |
42 301 |
41 999 |
| 89 |
ruby (2.7) |
syro (3.2) |
39 983 |
40 808 |
38 928 |
38 276 |
38 835 |
| 90 |
javascript (13.12) |
hapi (19.1) |
39 508 |
42 310 |
41 667 |
41 135 |
41 334 |
| 91 |
javascript (13.12) |
restify (8.5) |
39 374 |
41 087 |
41 084 |
38 973 |
39 481 |
| 92 |
ruby (2.7) |
hanami-api (0.1) |
39 320 |
39 761 |
37 722 |
37 499 |
38 051 |
| 93 |
python (3.8) |
emmett (2.0.0b2) |
38 973 |
41 404 |
41 212 |
39 562 |
39 855 |
| 94 |
php (7.4) |
sw-fw-less (preview) |
38 604 |
41 446 |
41 537 |
41 073 |
41 074 |
| 95 |
ruby (2.7) |
roda (3.31) |
36 802 |
37 483 |
35 935 |
35 613 |
35 750 |
| 96 |
elixir (1.1) |
plug (1.8) |
36 045 |
36 522 |
36 096 |
35 119 |
34 890 |
| 97 |
php (7.4) |
swoft (2.0) |
35 253 |
36 533 |
36 543 |
36 110 |
36 104 |
| 98 |
ruby (2.7) |
cuba (3.9) |
32 505 |
32 700 |
31 708 |
31 548 |
31 717 |
| 99 |
dart (2.7) |
aqueduct (3.3) |
31 445 |
31 110 |
31 473 |
30 890 |
30 864 |
| 100 |
elixir (1.1) |
phoenix (1.4) |
31 152 |
31 343 |
31 240 |
29 991 |
30 117 |
| 101 |
fsharp (4.7) |
suave (2.5) |
31 008 |
34 477 |
37 706 |
37 008 |
35 018 |
| 102 |
python (3.8) |
responder (2.0) |
29 540 |
31 138 |
30 904 |
29 755 |
29 726 |
| 103 |
ruby (2.7) |
rack-routing (0.0) |
28 436 |
27 928 |
27 289 |
27 072 |
27 239 |
| 104 |
ruby (2.7) |
rack_app (7.6) |
27 282 |
27 734 |
26 968 |
26 941 |
27 076 |
| 105 |
python (3.8) |
fastapi (0.54) |
27 015 |
29 239 |
29 059 |
27 794 |
27 096 |
| 106 |
python (3.8) |
molten (1.0) |
26 213 |
27 044 |
26 952 |
26 557 |
26 454 |
| 107 |
python (3.8) |
clastic (19.9) |
25 516 |
25 928 |
25 951 |
25 600 |
25 610 |
| 108 |
ruby (2.7) |
camping (2.1) |
25 001 |
24 411 |
23 998 |
24 001 |
23 936 |
| 109 |
python (3.8) |
aiohttp (3.6) |
24 096 |
27 391 |
27 287 |
26 557 |
26 550 |
| 110 |
rust (1.42) |
iron (0.6) |
23 962 |
23 900 |
23 918 |
23 726 |
23 822 |
| 111 |
python (3.8) |
flask (1.1) |
23 654 |
24 220 |
24 139 |
23 553 |
22 878 |
| 112 |
python (3.8) |
masonite (2.3) |
23 235 |
21 946 |
23 933 |
23 774 |
23 543 |
| 113 |
javascript (13.12) |
turbo_polka (0.3) |
22 656 |
21 534 |
20 429 |
20 174 |
19 984 |
| 114 |
php (7.4) |
spiral (2.4) |
18 325 |
18 451 |
18 625 |
18 399 |
18 596 |
| 115 |
ruby (2.7) |
sinatra (2.0) |
15 703 |
15 675 |
15 697 |
15 646 |
15 615 |
| 116 |
ruby (2.7) |
grape (1.3) |
14 425 |
14 485 |
14 447 |
14 393 |
14 494 |
| 117 |
javascript (13.12) |
sails (1.2) |
12 778 |
13 128 |
12 949 |
12 763 |
12 635 |
| 118 |
python (3.8) |
sanic (19.12) |
12 025 |
10 890 |
9 558 |
10 379 |
11 282 |
| 119 |
ruby (2.7) |
flame (4.18) |
11 473 |
11 172 |
11 178 |
11 163 |
11 157 |
| 120 |
swift (5.1) |
swifter (1.4) |
11 376 |
11 373 |
11 585 |
11 079 |
11 338 |
| 121 |
python (3.8) |
quart (0.11) |
10 915 |
12 074 |
11 331 |
10 722 |
10 748 |
| 122 |
ruby (2.7) |
hanami (1.3) |
10 733 |
10 676 |
10 587 |
10 592 |
10 598 |
| 123 |
php (7.4) |
ubiquity (2.3) |
9 144 |
9 067 |
8 907 |
51 207 |
49 102 |
| 124 |
python (3.8) |
django (3.0) |
8 864 |
9 659 |
9 286 |
9 132 |
9 193 |
| 125 |
python (3.8) |
tornado (6.0) |
8 555 |
10 316 |
10 157 |
9 991 |
10 014 |
| 126 |
python (3.8) |
cherrypy (18.5) |
8 403 |
9 111 |
9 026 |
8 189 |
8 901 |
| 127 |
php (7.4) |
one-fpm (2.0) |
7 943 |
7 878 |
7 696 |
44 601 |
41 414 |
| 128 |
php (7.4) |
phalcon (4.0) |
7 514 |
7 464 |
7 403 |
50 687 |
50 444 |
| 129 |
php (7.4) |
hamlet (3.2) |
7 514 |
7 481 |
7 437 |
44 114 |
43 756 |
| 130 |
php (7.4) |
chubbyphp (2.8) |
5 638 |
5 573 |
5 607 |
43 980 |
40 528 |
| 131 |
go (1.14) |
gramework (1.7) |
4 965 |
5 060 |
8 806 |
10 015 |
2 786 |
| 132 |
php (7.4) |
slim (4.5) |
4 652 |
4 667 |
4 719 |
42 716 |
38 975 |
| 133 |
php (7.4) |
lumen (7.0) |
4 309 |
4 333 |
4 391 |
42 424 |
39 240 |
| 134 |
php (7.4) |
yii (2.0) |
4 134 |
4 165 |
4 281 |
42 636 |
39 849 |
| 135 |
ruby (2.7) |
rails (6.0) |
3 782 |
3 612 |
3 601 |
3 552 |
3 549 |
| 136 |
php (7.4) |
symfony (4.3) |
3 182 |
3 213 |
3 259 |
41 060 |
38 514 |
| 137 |
php (7.4) |
mezzio (3.2) |
2 858 |
2 872 |
2 948 |
39 373 |
39 613 |
| 138 |
crystal (0.34) |
onyx (0.5) |
2 831 |
3 336 |
3 334 |
3 349 |
3 441 |
| 139 |
julia (1.4) |
merly (0.2) |
2 711 |
7 846 |
6 495 |
4 991 |
2 997 |
| 140 |
python (3.8) |
cyclone (1.3) |
2 441 |
2 448 |
2 432 |
2 413 |
2 408 |
| 141 |
python (3.8) |
nameko (2.12) |
1 545 |
1 504 |
1 487 |
1 464 |
1 470 |
| 142 |
python (3.8) |
klein (19.6) |
1 442 |
1 418 |
1 464 |
1 416 |
1 308 |
| 143 |
php (7.4) |
laminas (3.1) |
1 425 |
1 459 |
1 512 |
38 950 |
36 201 |
| 144 |
php (7.4) |
basicphp (0.9) |
833 |
466 |
1 200 |
34 281 |
34 058 |
| 145 |
perl (5.3) |
dancer2 (2.0) |
523 |
604 |
1 290 |
1 502 |
1 306 |
| 146 |
php (7.4) |
laravel (7.6) |
334 |
163 |
2 019 |
21 588 |
22 755 |
In any way you want ...
- Request a framework addition
- Report a bug (on any implementation)
- Suggest an idea
- ...
Any kind of idea is ❤️