This is the benchmark needed to find the perfect programming language and web development framework at least the fastest.
Machine: AMD FX-8320 4.0 GHz, 12 GB RAM.
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Bare Node.js | 2607953 | 2.24 | 2607953 | 0 | _ | _ | 60.55 |
Dragonrend.js | 3545549 | 1.65 | 3545549 | 0 | _ | _ | 60.51 |
Express.js | 2473805 | 2.35 | 2473805 | 0 | _ | _ | 60.47 |
Fastify.js | 3026307 | 1.91 | 3026307 | 0 | _ | _ | 60.44 |
Koa.js | 2930610 | 1.97 | 2930610 | 0 | _ | _ | 60.48 |
Java Http Server | 2599748 | 2.23 | 2599748 | 0 | 249 | 462.7 | 60.43 |
Spring Boot | 2186704 | 2.73 | 2186704 | 0 | 410 | 474.2 | 60.87 |
Proteus | 2713172 | 2.17 | 2713172 | 0 | 101 | 259.5 | 60.6 |
Colossus | 3482496 | 1.69 | 3482496 | 0 | 132 | 272.8 | 60.57 |
Blaze | 3390464 | 1.72 | 3390464 | 0 | 116 | 212.8 | 60.54 |
Actix | 3304113 | 1.77 | 3304113 | 0 | 97.5 | 11 | 60.59 |
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Bare Node.js | 2646970 | 2.19 | 2646970 | 0 | _ | _ | 60.49 |
Dragonrend.js | 3513369 | 1.67 | 3513369 | 0 | _ | _ | 60.59 |
Express.js | 2413458 | 2.4 | 2413458 | 0 | _ | _ | 60.44 |
Fastify.js | 3033961 | 1.9 | 3033961 | 0 | _ | _ | 60.42 |
Koa.js | 2886179 | 2 | 2886179 | 0 | _ | _ | 60.41 |
Java Http Server | 2626802 | 2.21 | 2626802 | 0 | 256 | 432 | 60.49 |
Spring Boot | 2175857 | 2.74 | 2175857 | 0 | 407 | 416.5 | 60.79 |
Proteus | 2740137 | 2.15 | 2740137 | 0 | 104 | 256.2 | 60.59 |
Colossus | 3486113 | 1.67 | 3486113 | 0 | 132 | 271.8 | 60.57 |
Blaze | 3485128 | 1.68 | 3485128 | 0 | 121 | 211.2 | 60.56 |
Actix | 3393272 | 1.72 | 3393272 | 0 | 96.5 | 11 | 60.54 |
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Bare Node.js | 2634937 | 2.2 | 2634937 | 0 | _ | _ | 60.45 |
Dragonrend.js | 3321675 | 1.76 | 3321675 | 0 | _ | _ | 60.45 |
Express.js | 2280709 | 2.55 | 2280709 | 0 | _ | _ | 60.51 |
Fastify.js | 2890691 | 1.99 | 2890691 | 0 | _ | _ | 60.38 |
Koa.js | 2672092 | 2.17 | 2672092 | 0 | _ | _ | 60.47 |
Java Http Server | 2675910 | 2.16 | 2675910 | 0 | 214 | 502 | 60.37 |
Spring Boot | 2060132 | 2.89 | 2060132 | 0 | 473 | 447.2 | 60.77 |
Actix | 3822047 | 1.53 | 3822047 | 0 | 105 | 10.8 | 60.5 |
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Bare Node.js | 2595860 | 2.24 | 2595860 | 0 | _ | _ | 60.55 |
Dragonrend.js | 3245853 | 1.81 | 3245853 | 0 | _ | _ | 60.59 |
Express.js | 2289065 | 2.54 | 2289065 | 0 | _ | _ | 60.53 |
Fastify.js | 2843923 | 2.03 | 2843923 | 0 | _ | _ | 60.42 |
Koa.js | 2618795 | 2.21 | 2618795 | 0 | _ | _ | 60.5 |
Spring Boot | 2076500 | 2.87 | 2076500 | 0 | 477 | 391.4 | 60.83 |
Actix | 3896895 | 1.5 | 3896895 | 0 | 115 | 10.6 | 60.41 |
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Bare Node.js | 2652808 | 2.2 | 2652808 | 0 | _ | _ | 60.59 |
Dragonrend.js | 3524767 | 1.67 | 3524767 | 0 | _ | _ | 60.58 |
Express.js | 2514659 | 2.31 | 2514659 | 0 | _ | _ | 60.5 |
Fastify.js | 3074613 | 1.87 | 3074613 | 0 | _ | _ | 60.39 |
Koa.js | 2973095 | 1.94 | 2973095 | 0 | _ | _ | 60.44 |
Java Http Server | 2687110 | 2.15 | 2687110 | 0 | 249 | 435.2 | 60.42 |
Spring Boot | 2622008 | 2.26 | 2622008 | 0 | 420 | 445.9 | 60.69 |
Proteus | 2806507 | 2.09 | 2806507 | 0 | 99.8 | 265 | 60.53 |
Colossus | 3452516 | 1.7 | 3452516 | 0 | 132 | 415.3 | 60.61 |
Blaze | 3416356 | 1.72 | 3416356 | 0 | 113 | 212.5 | 60.53 |
Actix | 3501122 | 1.67 | 3501122 | 0 | 98.6 | 10.9 | 60.52 |
Name | Requests Total | Latency Average | 2xx | Non 2xx | CPU % Average | Memory MB Average | Duration |
---|---|---|---|---|---|---|---|
Dragonrend.js | 3571999 | 1.64 | 3571999 | 0 | _ | _ | 60.64 |
Express.js | 2512260 | 2.31 | 2512260 | 0 | _ | _ | 60.53 |
Fastify.js | 3088123 | 1.87 | 3088123 | 0 | _ | _ | 60.41 |
Koa.js | 2963847 | 1.94 | 2963847 | 0 | _ | _ | 60.38 |
Spring Boot | 2138346 | 2.78 | 2138346 | 0 | 469 | 451.4 | 60.8 |
Proteus | 3160474 | 1.86 | 3160474 | 0 | 113 | 268.8 | 60.68 |
Colossus | 3615735 | 1.61 | 3615735 | 0 | 135 | 308.5 | 60.51 |
Actix | 3810874 | 1.54 | 3810874 | 0 | 103 | 11.1 | 60.44 |
If you want to run the benchmark yourself, then follow these instructions:
- Node.js and NPM
- Java, Maven
- Scala, SBT
- Rust, Cargo
- Node.js, NPM (should already be to start the benchmark)
$ git clone https://github.com/EgorRepnikov/in-search-of-a-web-panacea.git
$ npm run start
or
$ npm start
Then you should follow the instructions of CLI.
It is recommended to add the source code of the test subject to the appropriate language in the folder in the subjects folder. For example, you add the source code of some Java-framework: subjects/java/some-framework
<- sources here
Then you have to add a test subject to settings/subjects.json and create the new object:
{
// previous subjects
"Some Java Framework": {
"dir": "java/some-framework", // Source folder
"build": "mvn clean package", // Command to start the build process
"run": { // Command to start the built project
"command": "java",
"args": ["-jar", "target/some-framework.jar"] // Keys
},
"supports": [ // Implemented endpoints for testing (benchmark-types)
"get-tiny-json-entity",
"get-plain-text"
]
}
}
Important The subject should print a "START" signal at startup.
You can add a new type in the benchmark types file:
{
// previous types
"post-some-json-entity": {
"url": "http://localhost:8080/api/post-some-json-entity",
"method": "POST",
"headers": { "Content-Type": "application/json" },
"body": "{\"some\":\"entity\"}"
}
}
In-Search-of-a-Web-Panacea uses autocannon, so additional fields can be found in its documentation.
Egor Repnikov - GitHub
This project is licensed under the MIT License - see the LICENSE file for details