helturkey / web-frameworks

Which is the fastest web framework?

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Which is the fastest?

Build Status Join the chat at https://gitter.im/which_is_the_fastest/Lobby

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

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

Usage

  • 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

Results

ℹ️ Updated on 2020-02-12 ℹ️

Benchmarking with wrk

  • Threads : 8
  • Timeout : 8
  • Duration : 5s (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 (0.2) 164 369 184 768 184 919 70 977 71 159
2 javascript (13.7) sifrr (0.0) 161 955 183 125 183 864 70 006 68 959
3 javascript (13.7) nanoexpress (1.1) 158 849 176 208 178 562 67 993 67 882
4 go (1.13) fiber (1.4) 152 691 171 881 172 016 65 584 64 938
5 go (1.13) fasthttp (1.9) 150 018 167 953 172 077 65 079 64 836
6 go (1.13) fasthttprouter (0.1) 145 764 161 387 165 057 61 961 62 036
7 go (1.13) atreugo (10.3) 145 694 162 275 166 092 63 418 62 773
8 go (1.13) router (0.6) 145 427 160 854 165 600 63 072 62 173
9 go (1.13) gorouter-fasthttp (4.4) 143 436 158 888 162 861 62 107 60 963
10 java (8) rapidoid (5.5) 138 190 163 741 167 888 62 141 62 732
11 nim (1.0) jester (0.4) 129 860 144 405 143 422 52 359 54 006
12 php (7.4) workerman (3.5) 122 412 134 460 138 431 53 907 52 143
13 go (1.13) rte (0.0) 104 987 106 028 111 155 42 234 42 482
14 go (1.13) chi (4.0) 100 744 99 775 105 067 40 136 40 281
15 go (1.13) gorouter (4.4) 100 339 105 077 109 236 42 045 41 736
16 go (1.13) goroute (0.0) 97 081 95 973 100 216 38 881 38 841
17 ruby (2.6) agoo (2.12) 96 867 119 750 126 125 48 696 48 015
18 c (99) kore (3.3) 96 845 129 509 138 046 54 249 40 346
19 go (1.13) echo (4.1) 96 582 95 003 100 350 38 881 38 577
20 go (1.13) aero (1.3) 95 763 98 395 104 475 40 244 39 930
21 go (1.13) gorilla-mux (1.7) 94 413 92 835 97 633 37 962 37 838
22 go (1.13) beego (1.12) 94 333 96 976 101 664 39 230 39 056
23 go (1.13) violetear (7.0) 94 056 96 050 100 995 38 971 38 969
24 go (1.13) gin (1.5) 93 034 95 250 100 134 38 686 38 249
25 go (1.13) kami (2.2) 92 754 100 554 102 380 39 218 39 061
26 crystal (0.32) router.cr (0.2) 92 424 98 399 96 784 35 798 35 871
27 crystal (0.32) toro (0.4) 92 253 100 660 98 245 36 317 36 097
28 go (1.13) webgo (3.0) 90 981 88 487 94 109 36 461 36 611
29 csharp (8.0) aspnetcore (3.1) 88 080 100 536 101 268 38 681 38 738
30 java (8) act (1.8) 88 066 125 885 120 497 46 944 47 920
31 crystal (0.32) spider-gazelle (2.3) 86 350 95 088 92 112 34 170 33 798
32 crystal (0.32) raze (0.3) 85 833 92 560 90 377 33 742 33 432
33 go (1.13) air (0.14) 82 778 84 416 87 590 34 276 33 847
34 crystal (0.32) kemal (0.26) 79 793 84 138 76 553 30 493 30 256
35 javascript (13.7) polkadot (1.0) 78 716 98 837 98 564 36 316 36 185
36 cpp (14/17) drogon (1.0) 76 295 87 014 89 560 34 332 34 337
37 javascript (13.7) 0http (2.2) 74 975 94 734 94 055 34 820 34 881
38 crystal (0.32) grip (0.27) 74 737 79 245 76 697 28 616 28 387
39 go (1.13) gf (1.11) 72 296 78 606 81 084 31 358 31 319
40 crystal (0.32) amber (0.3) 71 880 76 890 75 001 27 757 27 377
41 javascript (13.7) restana (4.0) 70 759 89 692 88 655 32 922 32 864
42 javascript (13.7) polka (0.5) 70 185 84 903 82 965 30 898 30 794
43 c (11) agoo-c (0.7) 69 895 160 992 167 869 68 531 64 493
44 python (3.8) falcon (2.0) 69 479 74 588 75 469 28 733 28 764
45 swift (5.1) perfect (3.1) 69 299 77 635 81 848 32 105 31 717
46 javascript (13.7) rayo (1.3) 68 656 83 064 80 358 30 140 30 136
47 crystal (0.32) orion (2.1) 68 215 72 117 68 141 24 908 24 971
48 go (1.13) mars (1.0) 64 699 62 595 65 891 25 627 25 522
49 elixir (1.1) cowboy_stream (2.7) 60 672 63 854 63 717 24 286 24 165
50 javascript (13.7) muneem (2.4) 58 411 73 278 71 566 27 109 26 847
51 crystal (0.32) athena (0.8) 57 594 60 234 57 058 21 423 21 104
52 javascript (13.7) fastify (2.12) 57 386 70 552 68 347 26 127 25 789
53 php (7.4) one (1.9) 56 143 60 887 61 322 23 566 23 706
54 python (3.8) bottle (0.12) 56 002 60 234 60 633 23 091 23 222
55 javascript (13.7) foxify (0.1) 55 171 67 747 66 076 24 873 25 036
56 python (3.8) apidaora (0.12) 54 604 62 578 62 408 23 424 23 388
57 java (8) javalin (3.5) 53 666 78 944 74 958 28 584 29 282
58 scala (2.12) akkahttp (10.1) 52 224 73 107 65 299 28 674 28 207
59 python (3.8) asgineer (0.7) 51 360 57 737 56 664 21 500 21 236
60 javascript (13.7) koa (2.11) 49 684 59 852 60 718 23 130 21 474
61 swift (5.1) kitura-nio (2.8) 48 840 50 506 50 258 19 491 19 461
62 swift (5.1) kitura (2.8) 48 520 51 578 50 858 19 626 19 630
63 javascript (13.7) iotjs-express (0.0) 48 490 59 274 57 324 21 907 21 951
64 python (3.8) blacksheep (0.2) 47 088 53 415 52 446 19 915 19 700
65 swift (5.1) vapor (3.3) 47 044 49 380 48 997 18 681 18 739
66 clojure (1.1) coast (1.0) 46 082 55 009 55 232 21 277 21 172
67 python (3.8) pyramid (1.1) 45 043 47 421 47 983 18 759 18 648
68 python (3.8) hug (2.6) 44 592 47 340 47 360 18 233 18 415
69 javascript (13.7) moleculer (0.13) 44 335 61 770 59 476 23 281 22 959
70 php (7.4) hyperf (1.0) 44 289 49 496 49 450 19 305 18 996
71 javascript (13.7) express (4.17) 43 837 53 934 52 537 20 275 20 162
72 kotlin (1.3) ktor (1.2) 42 832 74 801 76 988 29 507 29 274
73 python (3.8) starlette (0.13) 42 535 47 533 48 745 15 965 16 351
74 cpp (11) evhtp (1.2) 40 958 44 175 45 324 17 703 17 365
75 rust (1.41) gotham (0.4) 39 827 47 564 49 908 19 899 20 109
76 php (7.4) sw-fw-less (preview) 39 736 42 419 42 243 16 177 16 172
77 elixir (1.1) cowboy (2.7) 39 504 41 931 41 395 15 387 15 695
78 ruby (2.6) syro (3.1) 37 562 40 064 39 002 15 015 15 236
79 ruby (2.6) roda (3.28) 36 958 39 194 38 460 14 724 14 901
80 php (7.4) imi (1.0) 36 762 41 187 42 542 16 511 16 448
81 java (8) spring-boot (2.1) 36 317 72 421 74 729 28 705 28 523
82 elixir (1.1) plug (1.8) 35 141 37 172 36 672 14 069 13 853
83 php (7.4) swoft (2.0) 34 713 36 565 35 711 13 805 13 802
84 javascript (13.7) hapi (19.1) 33 936 45 308 44 192 17 033 17 069
85 ruby (2.6) cuba (3.9) 33 638 34 126 34 042 13 322 13 288
86 javascript (13.7) restify (8.5) 30 968 40 888 39 460 15 219 15 153
87 scala (2.12) http4s (0.18) 30 590 57 097 58 538 22 947 23 048
88 rust (1.41) nickel (0.11) 30 349 20 287 19 084 11 713 11 702
89 elixir (1.1) phoenix (1.4) 30 312 31 517 31 018 11 933 11 926
90 java (8) micronaut (1.2) 29 617 68 757 69 670 26 457 26 526
91 python (3.8) fastapi (0.48) 28 722 30 205 30 693 11 388 11 221
92 fsharp (4.7) suave (2.5) 28 280 28 765 30 735 13 555 13 303
93 python (3.8) responder (2.0) 27 761 31 396 30 925 11 548 11 517
94 ruby (2.6) rack-routing (0.0) 27 694 28 587 28 160 11 029 11 134
95 ruby (2.6) camping (2.1) 25 088 25 346 25 290 9 896 9 903
96 python (3.8) clastic (19.9) 24 769 25 751 25 759 9 933 10 018
97 python (3.8) molten (0.27) 23 685 26 868 26 112 10 111 10 218
98 python (3.8) flask (1.1) 22 930 23 610 23 898 9 140 9 219
99 python (3.8) aiohttp (3.6) 22 635 24 448 24 425 8 932 9 068
100 python (3.8) masonite (2.3) 22 489 23 852 23 969 9 212 9 201
101 javascript (13.7) turbo_polka (0.3) 22 306 21 906 20 574 8 056 7 995
102 ruby (2.6) flame (4.18) 20 660 20 898 20 729 8 161 8 170
103 ruby (2.6) plezi (0.16) 19 495 20 512 18 213 6 920 6 821
104 python (3.8) sanic (19.12) 18 485 19 841 18 785 7 209 7 237
105 ruby (2.6) hanami (1.3) 17 650 18 033 17 838 7 009 7 035
106 java (8) spring-framework (5.2) 17 173 57 184 62 884 23 828 23 169
107 python (3.8) emmett (2.0.0a1) 17 143 17 997 17 513 6 344 6 278
108 rust (1.41) iron (0.6) 17 127 12 342 11 826 6 711 6 732
109 php (7.4) spiral (2.4) 16 065 17 321 17 790 6 827 6 804
110 ruby (2.6) sinatra (2.0) 14 555 14 377 14 382 5 900 6 328
111 crystal (0.32) lucky (0.18) 14 026 13 908 12 611 4 618 4 562
112 ruby (2.6) grape (1.3) 12 025 12 539 13 559 5 352 5 398
113 python (3.8) quart (0.11) 11 743 11 783 10 967 4 112 4 198
114 python (3.8) django (3.0) 10 048 10 419 10 310 4 056 4 033
115 python (3.8) tornado (6.0) 9 935 10 289 10 092 3 951 3 919
116 go (1.13) gramework (1.7) 9 743 9 851 9 864 3 901 3 916
117 python (3.8) cherrypy (18.5) 8 992 9 192 9 163 3 572 3 603
118 php (7.4) ubiquity (2.3) 8 593 8 851 10 750 17 770 18 939
119 swift (5.1) swifter (1.4) 7 901 8 056 7 959 3 074 3 283
120 php (7.4) one-fpm (1.9) 7 417 7 585 9 620 17 222 13 043
121 perl (5.3) dancer2 (2.0) 7 275 2 547 2 087 771 663
122 php (7.4) phalcon (4.0) 7 037 7 300 10 074 20 128 15 585
123 php (7.4) hamlet (3.2) 6 754 7 129 9 426 16 777 12 981
124 crystal (0.32) onyx (0.5) 5 561 5 953 6 032 2 428 2 482
125 php (7.4) slim (4.4) 4 310 4 711 7 583 16 505 14 346
126 php (7.4) lumen (6.3) 4 038 4 291 7 387 16 402 15 450
127 php (7.4) yii (2.0) 3 981 4 397 6 836 16 152 14 829
128 ruby (2.6) rails (6.0) 3 669 3 609 3 601 1 461 1 462
129 php (7.4) zend-expressive (3.2) 3 307 3 562 6 103 15 737 13 918
130 php (7.4) symfony (4.3) 3 121 3 547 6 158 16 106 13 175
131 julia (1.3) merly (0.2) 3 115 5 530 4 869 1 913 1 920
132 python (3.8) cyclone (1.3) 2 304 2 359 2 352 944 950
133 php (7.4) basicphp (0.9) 1 832 873 4 905 15 625 12 058
134 php (7.4) zend-framework (3.1) 1 808 1 909 5 602 15 759 13 624
135 python (3.8) nameko (2.12) 1 469 1 478 1 479 606 607
136 python (3.8) klein (19.6) 1 464 1 544 1 396 636 631
137 php (7.4) laravel (6.14) 446 284 3 235 12 393 10 636

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

About

Which is the fastest web framework?

License:MIT License


Languages

Language:PHP 48.6%Language:Crystal 11.6%Language:Python 7.1%Language:CMake 6.3%Language:Ruby 5.8%Language:Go 3.7%Language:Dockerfile 3.1%Language:Elixir 2.2%Language:JavaScript 1.9%Language:C++ 1.5%Language:Java 1.4%Language:Swift 1.3%Language:C 1.1%Language:Objective-C 0.8%Language:Scala 0.8%Language:Rust 0.7%Language:Nim 0.5%Language:C# 0.4%Language:Kotlin 0.3%Language:HTML 0.2%Language:Perl 0.2%Language:Makefile 0.2%Language:F# 0.1%Language:Clojure 0.1%Language:Julia 0.1%Language:Lua 0.0%