actix
Flagship · Rust · standard configuration · completeness 4/4
Actix-web 4 with rustls for TLS. Standard configuration: actix-files serves static content from disk per request via try_compressed(), which selects a pre-compressed .br/.gz sibling by Accept-Encoding through the framework API (no hand-rolled suffix lookup); the Compress middleware compresses dynamic responses (json-comp) on-the-fly. deadpool-postgres for async DB pooling (sized from DATABASE_MAX_CONN); crud reads go through an in-memory cache-aside (X-Cache MISS/HIT, invalidated on update — no Redis required). json-tls is served over HTTP/1.1-with-TLS on :8081; baseline-h2/static-h2 over h2 on :8443. serde_json per request. Pinned to actix git main for try_compressed() (unreleased in actix-files 0.6.10). Compiled with -O3 and thin LTO.
Achievements
🥇 5 Gold · 🥈 4 Silver · 🥉 5 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 · HTTP/1.1 | 1 of 71 |
| 🥇 Gold | Within its language | Rust · HTTP/1.1 | 1 of 7 |
| 🥇 Gold | Test profile | Concurrency · Async Delay | 1 of 67 |
| 🥇 Gold | Test profile | Connection · Baseline | 1 of 71 |
| 🥇 Gold | Test profile | WebSocket · Echo Pipelined | 1 of 12 |
| 🥈 Silver | Within its language | Rust · HTTP/2 | 2 of 4 |
| 🥈 Silver | Within its language | Rust · WebSocket | 2 of 4 |
| 🥈 Silver | Test profile | HTTP/2 · Baseline (h2c) | 2 of 14 |
| 🥈 Silver | Test profile | Workload · JSON TLS | 2 of 66 |
| 🥉 Bronze | Family composite | Composite · HTTP/2 | 3 of 18 |
| 🥉 Bronze | Family composite | Composite · WebSocket | 3 of 15 |
| 🥉 Bronze | Test profile | HTTP/2 · Baseline | 3 of 17 |
| 🥉 Bronze | Test profile | HTTP/2 · JSON (h2c) | 3 of 14 |
| 🥉 Bronze | Test profile | WebSocket · Echo | 3 of 15 |
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 | 1 of 71 | 6880 |
| HTTP/2 | 3 of 18 | 1608 |
| WebSocket | 3 of 15 | 1776 |
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 | 2,775,120 | 1.37ms | 2.56ms | 6675.4% | 154MiB |
| Connection | Pipelined | 4,096 | 16,338,425 | 3.69ms | 5.31ms | 6656.8% | 196MiB |
| Connection | Short-lived | 4,096 | 1,135,157 | 1.17ms | 9.25ms | 4577.8% | 72MiB |
| Concurrency | Async Delay | 32,000 | 2,112,168 | 13.37ms | 17.40ms | 5196.7% | 1009MiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 73.9us | 114.0us | 26.1% | 78MiB |
| Efficiency | Latency-1M | 1,024 | 997,622 | 112.0us | 177.0us | 2739.4% | 83MiB |
| Efficiency | Latency-500K/8 | 1,024 | 421,612 | 1542759.3us | 3077120.0us | 795.7% | 48MiB |
| Workload | JSON Comp | 4,096 | 541,211 | 6.38ms | 37.60ms | 6276.8% | 210MiB |
| Workload | JSON Comp | 16,384 | 532,649 | 17.60ms | 41.30ms | 6233.0% | 415MiB |
| Workload | JSON TLS | 4,096 | 1,157,219 | 3.56ms | 64.52ms | 6580.5% | 229MiB |
| Workload | 8Gbit | 512 | 49,401 | 84.6us | 114.0us | 195.7% | 93MiB |
| Workload | Static TLS | 1,024 | 55,882 | 22.16ms | 493.97ms | 6220.4% | 4.6GiB |
| Database | Async DB | 1,024 | 149,386 | 6.48ms | 11.00ms | 4015.0% | 125MiB |
| HTTP/2 | Baseline | 256 | 3,884,214 | 6.47ms | 17.98ms | 6348.5% | 173MiB |
| HTTP/2 | Baseline | 1,024 | 3,056,936 | 31.25ms | 95.31ms | 6287.4% | 592MiB |
| HTTP/2 | Static | 256 | 51,989 | 155.69ms | 1.58s | 5764.2% | 11.2GiB |
| HTTP/2 | Static | 1,024 | 64,019 | 514.33ms | 2.64s | 5068.6% | 37.0GiB |
| HTTP/2 | Baseline (h2c) | 256 | 5,918,827 | 4.12ms | 4.12ms | 6453.4% | 150MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 4,282,445 | 23.22ms | 23.22ms | 6451.7% | 496MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 3,597,318 | 101.66ms | 101.66ms | 6437.1% | 1.9GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,207,456 | 26.87ms | 26.87ms | 5364.2% | 281MiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,213,875 | 99.60ms | 99.60ms | 6376.2% | 1011MiB |
| WebSocket | Echo | 512 | 3,341,436 | 152us | 399us | 6371.0% | 51MiB |
| WebSocket | Echo | 4,096 | 3,409,380 | 1.03ms | 2.02ms | 6233.3% | 201MiB |
| WebSocket | Echo | 16,384 | 3,245,865 | 2.33ms | 4.48ms | 6062.1% | 485MiB |
| WebSocket | Echo Pipelined | 512 | 43,725,228 | 186us | 307us | 6751.9% | 58MiB |
| WebSocket | Echo Pipelined | 4,096 | 43,075,564 | 1.29ms | 1.82ms | 6392.9% | 212MiB |
| WebSocket | Echo Pipelined | 16,384 | 37,668,525 | 3.30ms | 7.78ms | 5797.9% | 544MiB |
Compared with
The Rust entries around actix on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs actix | |
|---|---|---|---|
| ntex | 5956 | -13% | head to head |
| tokio | 4738 | -31% | head to head |
Compare actix with any Rust entry · Compare actix with any entry, in any language · Every Rust entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry