Skip to content
Which is the fastest web framework?
PHP Crystal Python CMake Ruby Go Other
Branch: master
Clone or download
Pull request Compare This branch is 1 commit ahead, 23 commits behind the-benchmarker:master.
Latest commit 0f83137 Feb 10, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.ci [Elixir] Add phoenix / plug / cowboy / cowboy_stream (the-benchmarker… Feb 6, 2020
.dependabot [PHP] Add Yii (the-benchmarker#2240) Feb 6, 2020
.github/ISSUE_TEMPLATE remove old submission template Sep 3, 2018
c Use alpine to build all containers (the-benchmarker#1968) Nov 19, 2019
clojure [Clojure] Use OpenJDK 14 (the-benchmarker#2235) Feb 5, 2020
cpp [Java / Kotlin] Update to gradle 6 (the-benchmarker#2237) Feb 6, 2020
crystal [Crystal] Update athena to 0.8 (the-benchmarker#2244) Feb 7, 2020
csharp [C# + F#] Update dot net core v3.1 (the-benchmarker#2236) Feb 5, 2020
dart add angel target Feb 9, 2020
elixir [Elixir] Add phoenix / plug / cowboy / cowboy_stream (the-benchmarker… Feb 6, 2020
fsharp [C# + F#] Update dot net core v3.1 (the-benchmarker#2236) Feb 5, 2020
go [Go] Update beego to 1.12.1 (the-benchmarker#2246) Feb 7, 2020
java [Java / Kotlin] Update to gradle 6 (the-benchmarker#2237) Feb 6, 2020
javascript [Javascript] Update fastify to 2.12 (the-benchmarker#2243) Feb 7, 2020
julia [Julia] Add merly.jl (the-benchmarker#1960) Nov 3, 2019
kotlin [Java / Kotlin] Update to gradle 6 (the-benchmarker#2237) Feb 6, 2020
nim [Nim] Add phoon (the-benchmarker#2188) Jan 20, 2020
objc Run into lightweight containers (the-benchmarker#1578) Oct 14, 2019
perl [Rust] Upgrade containers to 1.40 (the-benchmarker#2111) Jan 6, 2020
php [PHP] Update basicphp to 0.9.3 (the-benchmarker#2251) Feb 9, 2020
python [Python] Update quart to 0.11 (the-benchmarker#2249) Feb 9, 2020
ruby [Ruby] Update agoo 2.12 (the-benchmarker#2179) Jan 20, 2020
rust [Rust] Upgrade to 1.41 (the-benchmarker#2216) Feb 1, 2020
scala Use alpine to build all containers (the-benchmarker#1968) Nov 19, 2019
spec [Elixir] Add phoenix / plug / cowboy / cowboy_stream (the-benchmarker… Feb 6, 2020
swift [Crystal] Update spider-gazelle to 2.3 (the-benchmarker#2117) Jan 5, 2020
tools [Crystal] Update athena to 0.8 (the-benchmarker#2244) Feb 7, 2020
.gitignore [Elixir] Add phoenix / plug / cowboy / cowboy_stream (the-benchmarker… Feb 6, 2020
.rubocop.yml Enforce coding conventions (the-benchmarker#1452) Jun 24, 2019
.travis.yml [PHP] Add Yii (the-benchmarker#2240) Feb 6, 2020
CODE_OF_CONDUCT.md Code of conduct (the-benchmarker#358) Sep 18, 2018
CONTRIBUTING.md Clarify readme (the-benchmarker#230) Jun 29, 2018
LICENSE Add license (the-benchmarker#424) Oct 10, 2018
README.md [PHP] Update basicphp to 0.9.3 (the-benchmarker#2251) Feb 9, 2020
README.mustache.md [PHP] Update basicphp to 0.9.3 (the-benchmarker#2251) Feb 9, 2020
docker-compose.yml [Crystal] Update athena to 0.8 (the-benchmarker#2244) Feb 7, 2020
format.yaml [PHP] Introduce phalcon (the-benchmarker#2082) Dec 28, 2019
shard.yml Use postgreSQL as storage engine (the-benchmarker#1774) Jan 9, 2020

README.md

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

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

You can’t perform that action at this time.