fulmine.js
Emerging · JS · engine: uwebsockets · standard configuration · completeness 4/4
fulmine.js (drop-in Express 5 on uWebSockets.js) with its own cluster option for multi-core scaling.
- Official repository
- Official website
- Benchmark implementation
- All JS entries, compared
- Open the leaderboard
Achievements
🥇 4 Gold · 🥈 4 Silver · 🥉 4 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥇 Gold | Family composite | Composite · Gateway | 1 of 7 |
| 🥇 Gold | Within its language | JS · HTTP/1.1 | 1 of 6 |
| 🥇 Gold | Test profile | Gateway · Gateway (H2) | 1 of 6 |
| 🥇 Gold | Test profile | Gateway · Gateway (H3) | 1 of 6 |
| 🥈 Silver | Test profile | Concurrency · Async Delay | 2 of 73 |
| 🥈 Silver | Test profile | Efficiency · Latency-10K | 2 of 76 |
| 🥈 Silver | Test profile | WebSocket · Echo Short-lived | 2 of 14 |
| 🥈 Silver | Test profile | Workload · JSON Comp | 2 of 73 |
| 🥉 Bronze | Family composite | Composite · WebSocket | 3 of 23 |
| 🥉 Bronze | Test profile | Gateway · Production Stack | 3 of 5 |
| 🥉 Bronze | Test profile | WebSocket · Echo | 3 of 23 |
| 🥉 Bronze | Test profile | Workload · JSON TLS | 3 of 74 |
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 5 of 76 | 6222 |
| Gateway | 1 of 7 | 2536 |
| WebSocket | 3 of 23 | 2431 |
Every result
Alpha Round, 28 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 1,766,593 | 2.32ms | 3.02ms | 6793.6% | 2.5GiB |
| Connection | Pipelined | 4,096 | 34,035,702 | 1.92ms | 3.26ms | 6712.7% | 1.9GiB |
| Connection | Short-lived | 4,096 | 1,574,805 | 2.59ms | 10.30ms | 6620.4% | 2.5GiB |
| Concurrency | Async Delay | 32,000 | 2,156,343 | 14.73ms | 17.30ms | 6386.7% | 5.6GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 80.3us | 120.0us | 37.5% | 2.1GiB |
| Efficiency | Latency-1M | 1,024 | 998,039 | 126.8us | 252.0us | 3650.6% | 2.4GiB |
| Efficiency | Latency-500K/8 | 1,024 | 338,048 | 3174777.0us | 7260160.0us | 785.1% | 361MiB |
| Workload | JSON Comp | 4,096 | 493,236 | 8.28ms | 26.10ms | 6346.4% | 7.6GiB |
| Workload | JSON Comp | 16,384 | 511,743 | 31.69ms | 76.40ms | 6254.5% | 8.7GiB |
| Workload | JSON TLS | 4,096 | 1,104,303 | 3.70ms | 93.14ms | 6573.3% | 8.1GiB |
| Workload | 8Gbit | 512 | 49,367 | 110.7us | 153.0us | 334.4% | 2.7GiB |
| Workload | Static TLS | 1,024 | 628,604 | 1.63ms | 17.30ms | 6583.9% | 3.1GiB |
| Database | Async DB | 1,024 | 234,297 | 3.85ms | 31.10ms | 5799.4% | 4.1GiB |
| Database | Fortunes | 1,024 | 68,596 | 13.62ms | 22.10ms | 6505.7% | 4.2GiB |
| Gateway | Gateway (H2) | 512 | 294,098 | 56.12ms | 465.18ms | 5298.9% | 4.8GiB |
| Gateway | Gateway (H2) | 1,024 | 270,947 | 105.29ms | 1.07s | 5536.6% | 5.4GiB |
| Gateway | Gateway (H3) | 64 | 90,345 | 22.55ms | 83.77ms | 3293.6% | 3.5GiB |
| Gateway | Gateway (H3) | 256 | 62,228 | 127.41ms | 756.51ms | 2400.2% | 4.4GiB |
| Gateway | Production Stack | 256 | 121,115 | 34.54ms | 1.14s | 2894.0% | 3.6GiB |
| Gateway | Production Stack | 1,024 | 105,345 | 133.45ms | 3.95s | 2746.4% | 4.1GiB |
| WebSocket | Echo | 512 | 3,692,974 | 138us | 364us | 6382.0% | 2.2GiB |
| WebSocket | Echo | 4,096 | 3,775,328 | 1.08ms | 2.30ms | 6540.1% | 2.2GiB |
| WebSocket | Echo | 16,384 | 3,497,191 | 4.66ms | 9.21ms | 6138.2% | 2.4GiB |
| WebSocket | Echo Pipelined | 512 | 23,414,387 | 349us | 973us | 6642.4% | 2.2GiB |
| WebSocket | Echo Pipelined | 4,096 | 23,892,198 | 2.74ms | 5.07ms | 6533.1% | 2.3GiB |
| WebSocket | Echo Pipelined | 16,384 | 22,702,300 | 11.34ms | 14.80ms | 6288.5% | 2.4GiB |
| WebSocket | Echo Short-lived | 512 | 2,076,459 | 150us | 537us | 5505.1% | 2.2GiB |
| WebSocket | Echo Short-lived | 4,096 | 2,558,703 | 1.05ms | 2.93ms | 6270.4% | 2.3GiB |
Compared with
The JS entries around fulmine.js on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs fulmine.js | |
|---|---|---|---|
| morojs | 5687 | -9% | head to head |
| hyper-express | 4639 | -25% | head to head |
Compare fulmine.js with any JS entry · Compare fulmine.js with any entry, in any language · Every JS entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry