/web-frameworks

Which is the fastest web framework?

Primary LanguagePHPMIT LicenseMIT

Which is the fastest?

CI

Chat with US

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
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Additional purposes :

  • Helping decide between languages, depending on use case
  • Learning languages, best practices, devops culture ...
  • Having fun ❤️

Requirements

  • Ruby 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

ℹ️ℹ️ℹ️ℹ️ℹ️

⚠️ On OSX you need docker-machine to use docker containerization

brew install docker-machine
docker-machine create default
eval $(docker-machine env default)

ℹ️ℹ️ℹ️ℹ️ℹ️

Usage

... to be documented ...

feel free to create an issue if you want to try this project

Results

ℹ️ Updated on 2021-01-24 ℹ️

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)
1 java (11) activej (3.0) 172 874.98 214 039.81 219 335.33
2 php (7.4) workerman (4.0) 149 415.01 182 618.83 184 760.71
3 php (7.4) mark (1.1) 122 745.29 135 463.52 136 443.44
4 go (1.15) gearbox (1.1) 121 267.09 124 517.21 123 998.74
5 go (1.15) fiber (2.3) 120 760.89 129 919.56 128 975.11
6 nim (1.4) httpbeast (0.2) 117 678.99 146 365.75 149 138.24
7 go (1.15) atreugo (11.6) 117 400.97 128 555.26 127 466.93
8 go (1.15) fasthttp (1.19) 116 313.79 130 394.06 130 416.34
9 go (1.15) router (1.3) 116 185.27 128 662.89 128 222.12
10 go (1.15) gorouter-fasthttp (4.4) 115 811.83 128 681.38 128 586.42
11 nim (1.4) whip (0.2) 114 332.56 142 037.79 145 188.64
12 go (1.15) webgo (4.1) 112 645.03 112 137.52 115 331.38
13 java (11) undertow (2.2) 112 639.77 137 587.26 139 710.77
14 clojure (1.1) donkey (0.4) 111 357.38 113 087.65 115 268.66
15 java (11) rapidoid (5.5) 110 960.06 134 924.68 138 165.85
16 javascript (14.15) nanoexpress (2.4) 110 757.65 141 765.32 145 820.12
17 kotlin (1.4) kooby (2.9) 110 221.65 137 018.57 142 192.92
18 java (11) jooby (2.9) 109 641.33 138 111.93 142 905.99
19 javascript (14.15) sifrr (0.0) 108 572.79 137 911.33 140 563.89
20 c (11) kore (3.3) 108 005.26 180 300.55 191 658.61
21 go (1.15) gorilla-mux (1.8) 108 002.73 104 385.33 109 127.99
22 java (11) light-4j (2.0) 107 291.67 133 436.81 137 234.30
23 nim (1.4) jester (0.5) 106 325.77 132 009.27 134 976.40
24 crystal (0.35) toro (0.4) 101 226.43 120 595.41 120 917.12
25 crystal (0.35) router.cr (0.2) 99 151.16 121 889.20 121 693.74
26 crystal (0.35) spider-gazelle (3.4) 97 137.72 120 543.93 120 587.11
27 php (7.4) nano (0.0.9) 95 449.05 138 517.02 149 045.59
28 java (11) act (1.9) 95 362.93 117 108.58 120 092.15
29 crystal (0.35) grip (4.0) 92 815.25 112 177.58 112 402.70
30 crystal (0.35) kemal (0.27) 92 313.46 110 926.57 111 017.48
31 crystal (0.35) amber (0.35) 87 688.89 105 291.75 104 455.97
32 java (11) quarkus (1.11) 87 245.93 105 730.73 108 735.84
33 crystal (0.35) athena (0.12) 82 733.36 93 818.27 88 964.96
34 php (7.4) simps (1.0) 82 499.24 108 614.45 111 623.77
35 javascript (14.15) naturaljs-router (0.1.1) 81 810.97 98 502.83 99 727.76
36 scala (2.13) akkahttp (10.2) 81 677.79 95 543.52 94 140.89
37 go (1.15) gf (1.15) 81 402.66 88 756.74 91 415.31
38 go (1.15) clevergo (0.5) 81 078.29 82 399.33 84 275.82
39 go (1.15) rte (0.0) 80 958.49 82 047.54 83 991.58
40 go (1.15) echo (4.1) 80 272.16 81 564.24 83 424.42
41 go (1.15) httprouter (1.3) 79 856.10 80 798.72 82 911.60
42 go (1.15) gin (1.6) 78 568.55 82 569.19 83 936.20
43 go (1.15) gorouter (4.5) 78 498.07 83 115.24 84 245.62
44 go (1.15) chi (1.5) 77 751.33 77 136.78 79 916.47
45 go (1.15) violetear (7.0) 77 018.19 77 283.21 79 288.02
46 csharp (8.0) aspnetcore (5.0) 75 641.81 88 714.30 91 428.05
47 go (1.15) kami (2.2) 75 299.14 79 233.17 79 806.89
48 go (1.15) aero (1.3) 74 849.68 74 643.97 76 720.90
49 java (11) restheart (5.1) 74 398.46 76 679.88 77 709.47
50 go (1.15) goroute (0.0) 73 163.62 71 537.23 74 317.48
51 python (3.9) falcon (2.0) 73 061.79 80 611.19 82 022.82
52 fsharp (5.0) frank (6.2) 72 971.47 84 328.31 87 031.20
53 cpp (11) drogon (1.2) 71 967.47 65 907.68 64 892.53
54 fsharp (5.0) falco (3.0) 71 944.09 83 099.20 85 522.53
55 go (1.15) beego (1.12) 71 848.84 74 648.97 76 654.62
56 javascript (14.15) low-http-server (2.1) 70 175.64 78 754.32 79 569.76
57 c (11) agoo-c (0.7) 67 367.02 129 803.72 129 518.76
58 csharp (8.0) carter (5.2) 65 115.67 73 141.87 73 409.75
59 go (1.15) air (0.21) 65 013.94 63 591.61 66 118.69
60 go (1.15) goyave (3.6) 62 866.38 62 739.04 65 441.23
61 javascript (14.15) 0http (3.0) 61 490.07 66 243.77 67 454.30
62 scala (2.13) finch (0.32) 60 382.10 67 389.77 67 277.02
63 java (11) spring (2.4) 59 668.74 62 940.24 63 663.19
64 fsharp (5.0) saturn (0.14) 59 346.72 64 485.74 63 581.03
65 javascript (14.15) polkadot (1.0) 58 765.86 67 613.86 69 056.33
66 javascript (14.15) polka (0.5) 57 803.42 62 332.73 61 211.39
67 javascript (14.15) restana (4.7) 56 573.82 63 578.67 64 693.22
68 javascript (14.15) rayo (1.3) 55 855.37 60 789.16 59 451.39
69 javascript (14.15) fastify (3.10) 54 731.78 59 228.80 58 120.92
70 php (7.4) one (2.2) 54 003.54 60 155.67 69 861.95
71 javascript (14.15) muneem (2.4) 53 393.32 58 881.06 57 055.15
72 python (3.9) pyramid (1.1) 53 301.53 58 303.62 58 930.98
73 elixir (1.11) cowboy_stream (2.8) 53 226.88 55 721.14 54 535.84
74 ruby (2.7) agoo (2.14) 52 550.72 76 339.36 83 436.76
75 kotlin (1.4) http4k (3.275) 52 291.97 60 234.82 62 622.75
76 php (7.4) hyperf (2.1) 51 965.30 63 456.65 64 847.68
77 swift (5.3) perfect (3.1) 51 728.89 57 062.22 64 154.32
78 fsharp (5.0) websharper (4.7) 50 646.28 57 365.15 57 721.85
79 java (11) javalin (3.9) 50 483.51 54 580.79 54 742.99
80 kotlin (1.4) ktor (1.4) 50 137.35 65 715.76 68 729.04
81 java (11) spark (2.9) 49 863.96 54 475.77 55 683.15
82 java (11) micronaut (1.2) 49 284.20 57 493.62 57 243.89
83 javascript (14.15) nestjs-fastify (7.6) 48 600.74 51 674.11 50 609.60
84 rust (1.49) actix (3.3) 48 003.86 50 697.37 50 414.53
85 haskell (8.8) scotty (0.12) 46 206.70 48 913.76 50 442.04
86 go (1.15) mars (1.0) 46 168.37 46 713.99 49 774.92
87 javascript (14.15) foxify (0.1) 45 131.05 49 467.97 47 950.19
88 python (3.9) asgineer (0.8) 45 006.13 51 096.95 52 889.91
89 javascript (14.15) iotjs-express (0.0) 44 812.19 48 789.49 48 371.21
90 clojure (1.1) coast (1.0) 44 756.53 45 810.95 46 040.69
91 php (7.4) comet (0.8) 44 480.60 47 996.07 48 941.23
92 r (4.0) rserve (1.7) 43 058.04 32 304.72 30 842.56
93 python (3.9) bottle (0.12) 42 853.26 44 964.34 46 232.34
94 javascript (14.15) koa (2.13) 40 242.52 44 044.32 42 876.92
95 javascript (14.15) fyrejet-api (2.1) 37 063.45 39 510.81 38 981.11
96 python (3.9) emmett (2.1) 36 993.55 41 429.92 42 408.80
97 elixir (1.11) cowboy (2.8) 36 371.91 37 636.49 37 587.04
98 swift (5.3) kitura-nio (2.9) 36 015.25 35 010.91 35 022.60
99 swift (5.3) kitura (2.9) 35 521.68 35 506.62 35 462.83
100 javascript (14.15) hapi (20.0) 34 791.84 35 485.86 34 317.71
101 javascript (14.15) moleculer (0.14) 34 736.54 35 772.06 34 686.40
102 php (7.4) chubbyphp-workerman (3.4) 34 562.47 37 068.64 36 744.62
103 php (7.4) siler-swoole (1.7) 34 512.95 50 012.16 53 663.66
104 swift (5.3) vapor (4.38) 34 199.88 36 411.15 36 050.07
105 rust (1.49) nickel (0.11) 34 100.96 34 514.93 33 340.84
106 cpp (11) evhtp (1.2) 33 883.69 34 798.06 33 191.16
107 python (3.9) hug (2.6) 33 272.32 35 299.08 35 586.93
108 java (11) jersey3-grizzly2 (3) 33 253.98 38 280.15 37 869.76
109 scala (2.13) http4s (0.21) 33 237.87 37 679.81 38 199.73
110 java (11) jersey-grizzly2 (2.33) 33 126.27 38 158.80 37 742.53
111 python (3.9) apidaora (0.28) 32 791.16 38 668.46 39 594.98
112 fsharp (5.0) suave (2.6) 32 539.34 28 246.55 25 229.38
113 rust (1.49) gotham (0.5) 32 104.24 35 524.07 36 513.38
114 dart (2.10) aqueduct (3.3) 31 257.27 31 196.21 30 876.48
115 python (3.9) sanic (20.12) 30 982.00 33 597.06 34 484.73
116 rust (1.49) salvo (0.5) 30 482.71 32 366.39 32 990.26
117 python (3.9) blacksheep (0.3) 30 049.56 34 284.53 34 577.99
118 javascript (14.15) restify (8.5) 30 039.10 30 511.67 29 575.56
119 csharp (8.0) simplify.web (4.2) 28 920.28 31 862.60 31 735.90
120 python (3.9) starlette (0.14) 28 047.81 32 338.76 32 643.54
121 php (7.4) yii-swoole (2.0) 28 026.15 31 878.20 33 138.83
122 javascript (14.15) fyrejet-uwebsockets (2.1) 27 500.59 29 414.37 29 879.50
123 elixir (1.11) plug (1.11) 26 957.98 29 093.94 28 527.28
124 scala (2.13) play (2.8) 26 720.72 28 454.53 28 310.29
125 python (3.9) index.py (0.16) 26 030.01 29 601.10 30 794.73
126 python (3.9) responder (2.0) 25 483.58 30 414.82 31 234.91
127 crystal (0.35) orion (3.0) 24 252.70 23 387.60 20 138.83
128 elixir (1.11) phoenix (1.5) 24 214.10 26 088.18 25 561.19
129 haskell (8.8) servant (0.17) 22 868.22 21 771.92 20 591.00
130 python (3.9) clastic (19.9) 22 189.47 28 527.64 28 337.38
131 crystal (0.35) shivneri (0.16) 22 098.47 21 106.55 19 423.77
132 fsharp (5.0) giraffe (4.1) 22 074.66 21 834.77 21 594.71
133 clojure (1.1) luminus (3.91) 21 885.66 21 083.59 18 659.93
134 nim (1.4) mike (0.5) 21 158.60 20 578.11 20 258.44
135 javascript (14.15) fyrejet (2.1) 21 113.18 22 906.42 22 426.61
136 python (3.9) molten (1.0) 19 498.00 22 123.98 21 899.97
137 javascript (14.15) turbo_polka (0.3) 18 707.07 17 570.21 16 840.46
138 python (3.9) aiohttp (3.7) 18 523.55 23 872.60 24 068.37
139 python (3.9) fastapi (0.63) 18 069.67 21 975.72 21 920.76
140 nim (1.4) akane (0.1) 17 558.22 15 722.48 14 727.92
141 ruby (2.7) hanami-api (0.1) 17 186.48 16 730.40 16 260.52
142 rust (1.49) iron (0.6) 17 055.03 16 788.04 16 931.80
143 php (7.4) swoft (2.0) 16 921.95 20 519.81 21 331.31
144 ruby (2.7) syro (3.2) 16 628.25 16 010.17 15 801.52
145 nim (1.4) rosencrantz (0.4) 16 150.75 14 290.21 13 243.37
146 ruby (2.7) roda (3.40) 15 995.95 15 669.07 15 258.80
147 php (7.4) chubbyphp-swoole (3.4) 15 755.89 18 554.46 19 010.29
148 php (7.4) sw-fw-less (preview) 15 399.67 17 924.84 18 240.25
149 ruby (2.7) cuba (3.9) 15 384.59 14 818.63 14 606.48
150 go (1.15) macaron (1.4) 15 380.88 16 930.64 16 884.56
151 javascript (14.15) feathersjs (4.5) 15 155.74 18 032.73 18 065.92
152 php (7.4) slim-swoole (4.7) 15 068.82 17 359.22 17 669.76
153 javascript (14.15) express (4.17) 15 015.73 18 078.91 17 476.24
154 ruby (2.7) rack-routing (0.0) 14 175.69 13 766.93 13 511.93
155 swift (5.3) swifter (1.5) 13 948.63 13 969.32 14 460.17
156 java (11) struts2 (2.5) 13 917.74 14 198.26 14 251.73
157 python (3.9) flask (1.1) 13 816.83 15 391.80 17 152.78
158 ruby (2.7) rack_app (7.7) 13 766.93 13 345.86 13 103.59
159 ruby (2.7) camping (2.1) 13 280.24 12 791.02 12 627.69
160 java (11) blade (2.0) 13 036.94 15 297.77 14 424.41
161 javascript (14.15) nestjs-express (7.6) 11 817.02 11 742.27 11 531.21
162 go (1.15) tango (0.6) 11 373.31 11 604.28 11 625.10
163 dart (2.10) start (0.4) 11 056.47 10 853.99 10 659.16
164 php (7.4) sunrise-router-roadrunner (2.5) 10 224.14 10 472.95 10 557.53
165 php (7.4) chubbyphp-roadrunner (3.4) 9 999.56 10 263.18 10 358.44
166 go (1.15) gramework (1.7) 9 810.75 9 996.68 9 937.54
167 python (3.9) cherrypy (18.6) 9 789.74 9 651.19 9 507.05
168 php (7.4) slim-roadrunner (4.7) 9 783.73 10 013.59 10 080.87
169 python (3.9) masonite (2.3) 9 729.40 20 279.31 20 208.65
170 php (7.4) spiral (2.7) 9 614.24 9 727.76 9 873.65
171 python (3.9) guillotina (6.1) 9 225.95 9 579.87 8 847.15
172 ruby (2.7) sinatra (2.1) 9 091.10 8 854.24 8 818.27
173 ruby (2.7) grape (1.5) 8 722.40 8 406.15 8 345.13
174 pony (0.38) jennet (0.1) 7 780.14 13 129.07 12 468.31
175 python (3.9) quart (0.14) 7 519.78 7 193.65 6 939.15
176 python (3.9) tonberry (0.2) 7 408.60 7 071.57 6 519.12
177 php (7.4) phalcon (4.1) 6 780.91 6 719.60 6 663.73
178 python (3.9) tornado (6.1) 6 672.67 6 644.60 6 406.59
179 php (7.4) siler (1.7) 6 575.50 6 512.06 6 459.26
180 php (7.4) basicphp (0.9) 6 503.07 6 431.66 6 303.40
181 php (7.4) fastsitephp (1.4) 6 320.91 6 283.11 6 156.90
182 php (7.4) ice (1.5) 6 213.95 6 137.08 6 112.87
183 python (3.9) django (3.1) 6 127.34 5 826.39 5 699.35
184 clojure (1.1) yada (1.2) 5 983.98 6 689.29 6 672.45
185 ruby (2.7) flame (4.18) 5 707.67 5 621.63 5 645.54
186 ruby (2.7) hanami (1.3) 5 276.98 5 181.00 5 235.03
187 php (7.4) ubiquity (2.3) 5 220.60 5 194.92 5 142.64
188 php (7.4) one-fpm (2.2) 4 670.50 4 620.34 4 584.17
189 php (7.4) hamlet (3.2) 4 443.39 4 393.56 4 355.21
190 php (7.4) slim (4.7) 4 438.80 4 408.98 4 408.56
191 javascript (14.15) sails (1.4) 4 296.13 4 252.85 4 252.99
192 v (0.1) vape (0.3) 4 164.45 2 268.26 2 267.63
193 php (7.4) bearframework (1.3) 3 956.47 3 899.55 3 886.76
194 php (7.4) nette (3.1) 3 862.24 3 853.15 3 866.96
195 php (7.4) lumen (8.2) 3 830.03 3 837.93 3 859.82
196 julia (1.6) merly (0.2) 3 791.22 6 792.09 5 757.87
197 php (7.4) sunrise-router (2.5) 3 780.90 3 722.21 3 722.77
198 php (7.4) chubbyphp (3.4) 3 423.68 3 396.54 3 386.92
199 php (7.4) symfony (5.2) 2 974.99 2 993.67 3 010.97
200 ruby (2.7) rails (6.1) 2 819.34 2 813.50 2 797.32
201 php (7.4) yii (2.0) 2 618.36 2 594.91 2 617.84
202 php (7.4) fatfree (3.7) 2 313.52 2 285.73 2 469.47
203 php (7.4) sunrise-router-annotations (2.5) 2 297.32 2 286.11 2 316.50
204 ruby (2.7) pakyow (1.0) 2 239.44 2 572.37 2 537.41
205 php (7.4) antidot (0.1) 2 116.52 2 139.31 1 665.30
206 r (4.0) restrserve (0.3) 1 934.74 1 850.81 1 854.20
207 r (4.0) httpuv (1.5) 1 931.24 1 837.16 1 761.46
208 crystal (0.35) runcobo (1.0) 1 898.41 1 956.18 1 944.38
209 php (7.4) mezzio (3.2) 1 859.32 1 856.95 1 862.77
210 php (7.4) driftphp (0.1) 1 825.75 1 787.27 1 393.16
211 python (3.9) klein (20.6) 1 662.78 1 661.79 1 627.73
212 python (3.9) cyclone (1.3) 1 659.70 1 657.21 1 631.34
213 php (7.4) laminas (3.2) 1 582.62 1 591.30 1 603.03
214 perl (5.32) dancer2 (0.3) 1 361.73 646.32 532.78
215 python (3.9) django-ninja (0.10) 1 317.94 1 624.75 1 653.77
216 python (3.9) nameko (2.13) 1 245.27 1 176.47 1 182.44
217 php (7.4) codeigniter4 (4.0) 1 092.27 1 109.07 1 107.24
218 php (7.4) laravel (8.24) 904.68 909.29 907.74
219 r (4.0) plumber (1.0) 287.60 302.64 -86.01
220 cpp (11) nawa (0.6) 265.70 NaN NaN

How to contribute ?

In any way you want ...

  • Request a framework addition
  • Report a bug (on any implementation)
  • Suggest an idea
  • ...

Any kind of idea is ❤️

Contributors