From 79efe04651b7c3b063ca312a60aadf060f54e55a Mon Sep 17 00:00:00 2001
From: BennyFranciscus <268274351+BennyFranciscus@users.noreply.github.com>
Date: Sun, 29 Mar 2026 11:26:24 +0000
Subject: [PATCH] Update mixed to include static and async-db, add results too
---
frameworks/workerman/meta.json | 3 +-
requests/async-db-get.raw | 3 +
scripts/benchmark.sh | 10 +-
site/data/current.json | 4 +-
site/data/mixed-16384.json | 1271 +--
site/data/mixed-4096.json | 1271 +--
.../shortcodes/leaderboard-composite.html | 18 +-
site/layouts/shortcodes/leaderboard.html | 22 +-
site/static/logs/mixed/16384/deno.log | 8492 +++++++----------
site/static/logs/mixed/16384/django.log | 630 +-
site/static/logs/mixed/16384/fastapi.log | 4030 ++------
site/static/logs/mixed/16384/flask.log | 735 +-
site/static/logs/mixed/16384/hono-bun.log | 960 ++
site/static/logs/mixed/16384/hono.log | 7 -
site/static/logs/mixed/16384/humming-bird.log | 2 +-
site/static/logs/mixed/16384/kemal.log | 1832 ++--
site/static/logs/mixed/16384/koa.log | 168 -
site/static/logs/mixed/16384/rails.log | 248 +-
site/static/logs/mixed/16384/sinatra.log | 250 +-
site/static/logs/mixed/16384/starlette.log | 3002 +++---
site/static/logs/mixed/4096/deno.log | 431 +-
site/static/logs/mixed/4096/django.log | 578 +-
site/static/logs/mixed/4096/fastapi.log | 3691 ++-----
site/static/logs/mixed/4096/flask.log | 543 +-
site/static/logs/mixed/4096/hono-bun.log | 864 --
site/static/logs/mixed/4096/humming-bird.log | 2 +-
site/static/logs/mixed/4096/kemal.log | 1594 ++--
site/static/logs/mixed/4096/quarkus-jvm.log | 2 +-
site/static/logs/mixed/4096/rails.log | 242 +-
site/static/logs/mixed/4096/sinatra.log | 240 +-
site/static/logs/mixed/4096/starlette.log | 2792 ++----
31 files changed, 13365 insertions(+), 20572 deletions(-)
create mode 100644 requests/async-db-get.raw
diff --git a/frameworks/workerman/meta.json b/frameworks/workerman/meta.json
index fcdac4c2..c023efe6 100644
--- a/frameworks/workerman/meta.json
+++ b/frameworks/workerman/meta.json
@@ -12,7 +12,6 @@
"noisy",
"json",
"compression",
- "limited-conn",
- "mixed"
+ "limited-conn"
]
}
diff --git a/requests/async-db-get.raw b/requests/async-db-get.raw
new file mode 100644
index 00000000..848a03b9
--- /dev/null
+++ b/requests/async-db-get.raw
@@ -0,0 +1,3 @@
+GET /async-db?min=10&max=50 HTTP/1.1
+Host: localhost:8080
+
diff --git a/scripts/benchmark.sh b/scripts/benchmark.sh
index e445b7c0..ed645ab4 100755
--- a/scripts/benchmark.sh
+++ b/scripts/benchmark.sh
@@ -523,7 +523,7 @@ for profile in "${profiles_to_run[@]}"; do
-c "$CONNS" -t "$THREADS" -d "$DURATION" -p "$pipeline")
elif [ "$endpoint" = "mixed" ]; then
gc_args=("http://localhost:$PORT"
- --raw "$REQUESTS_DIR/get.raw,$REQUESTS_DIR/get.raw,$REQUESTS_DIR/get.raw,$REQUESTS_DIR/post_cl.raw,$REQUESTS_DIR/post_cl.raw,$REQUESTS_DIR/json-get.raw,$REQUESTS_DIR/db-get.raw,$REQUESTS_DIR/upload-small.raw,$REQUESTS_DIR/json-gzip.raw,$REQUESTS_DIR/json-gzip.raw"
+ --raw "$REQUESTS_DIR/get.raw,$REQUESTS_DIR/get.raw,$REQUESTS_DIR/get.raw,$REQUESTS_DIR/post_cl.raw,$REQUESTS_DIR/post_cl.raw,$REQUESTS_DIR/json-get.raw,$REQUESTS_DIR/db-get.raw,$REQUESTS_DIR/upload-small.raw,$REQUESTS_DIR/json-gzip.raw,$REQUESTS_DIR/json-gzip.raw,$REQUESTS_DIR/static-reset.css.raw,$REQUESTS_DIR/static-app.js.raw,$REQUESTS_DIR/async-db-get.raw,$REQUESTS_DIR/async-db-get.raw"
-c "$CONNS" -t "$THREADS" -d 15s -p "$pipeline")
elif [ "$endpoint" = "async-db" ]; then
gc_args=("http://localhost:$PORT/async-db?min=10&max=50"
@@ -687,19 +687,23 @@ else: print(f'{bps}B/s')
if [ "$USE_H2LOAD" = "false" ] && [ "$USE_OHA" = "false" ]; then
tpl_line=$(echo "$best_output" | grep -oP 'Per-template-ok: \K.*' || echo "")
if [ -n "$tpl_line" ] && [ "$endpoint" = "mixed" ]; then
- # Mixed templates: get×3, post_cl×2, json-get×1, db-get×1, upload-small×1, json-gzip×2
+ # Mixed templates: get×3, post_cl×2, json-get×1, db-get×1, upload-small×1, json-gzip×2, static×2, async-db×2
IFS=',' read -ra tpl_counts <<< "$tpl_line"
t_baseline=$(( ${tpl_counts[0]:-0} + ${tpl_counts[1]:-0} + ${tpl_counts[2]:-0} + ${tpl_counts[3]:-0} + ${tpl_counts[4]:-0} ))
t_json=${tpl_counts[5]:-0}
t_db=${tpl_counts[6]:-0}
t_upload=${tpl_counts[7]:-0}
t_compression=$(( ${tpl_counts[8]:-0} + ${tpl_counts[9]:-0} ))
+ t_static=$(( ${tpl_counts[10]:-0} + ${tpl_counts[11]:-0} ))
+ t_async_db=$(( ${tpl_counts[12]:-0} + ${tpl_counts[13]:-0} ))
tpl_json=",
\"tpl_baseline\": $t_baseline,
\"tpl_json\": $t_json,
\"tpl_db\": $t_db,
\"tpl_upload\": $t_upload,
- \"tpl_compression\": $t_compression"
+ \"tpl_compression\": $t_compression,
+ \"tpl_static\": $t_static,
+ \"tpl_async_db\": $t_async_db"
fi
fi
diff --git a/site/data/current.json b/site/data/current.json
index ad3accf0..de81ae9e 100644
--- a/site/data/current.json
+++ b/site/data/current.json
@@ -1,5 +1,5 @@
{
- "date": "2026-03-28",
+ "date": "2026-03-29",
"cpu": "AMD Ryzen Threadripper PRO 3995WX 64-Cores",
"cores": "64",
"threads": "128",
@@ -7,7 +7,7 @@
"os": "Ubuntu 24.04.4 LTS",
"kernel": "6.17.0-19-generic",
"docker": "29.3.0",
- "commit": "aaf3311",
+ "commit": "4d7100d",
"governor": "performance",
"docker_runtime": "runc",
"threads_per_core": "2",
diff --git a/site/data/mixed-16384.json b/site/data/mixed-16384.json
index 2ea9e6df..4323dc17 100644
--- a/site/data/mixed-16384.json
+++ b/site/data/mixed-16384.json
@@ -1,977 +1,1022 @@
[
+ {
+ "framework": "go-fasthttp",
+ "language": "Go",
+ "rps": 54255,
+ "avg_latency": "229.98ms",
+ "p99_latency": "3.17s",
+ "cpu": "8764.2%",
+ "memory": "88.0GiB",
+ "connections": 16384,
+ "threads": 64,
+ "duration": "5s",
+ "pipeline": 1,
+ "bandwidth": "1.69GB/s",
+ "input_bw": "5.30GB/s",
+ "reconnects": 168363,
+ "status_2xx": 814925,
+ "status_3xx": 0,
+ "status_4xx": 0,
+ "status_5xx": 0,
+ "tpl_baseline": 462808,
+ "tpl_json": 87971,
+ "tpl_db": 75916,
+ "tpl_upload": 68199,
+ "tpl_compression": 120031
+ },
{
"framework": "actix",
"language": "Rust",
- "rps": 34965,
- "avg_latency": "379.24ms",
- "p99_latency": "4.38s",
- "cpu": "8634.6%",
- "memory": "14.6GiB",
+ "rps": 61159,
+ "avg_latency": "228.22ms",
+ "p99_latency": "2.83s",
+ "cpu": "7757.1%",
+ "memory": "9.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.30GB/s",
- "input_bw": "3.42GB/s",
- "reconnects": 110552,
- "status_2xx": 525877,
+ "bandwidth": "1.80GB/s",
+ "input_bw": "4.27GB/s",
+ "reconnects": 193938,
+ "status_2xx": 919223,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 266694,
- "tpl_json": 54099,
- "tpl_db": 57367,
- "tpl_upload": 68147,
- "tpl_compression": 79570
+ "tpl_baseline": 366028,
+ "tpl_json": 64464,
+ "tpl_db": 66136,
+ "tpl_upload": 78435,
+ "tpl_compression": 104890,
+ "tpl_static": 109059,
+ "tpl_async_db": 130211
},
{
"framework": "aspnet-minimal",
"language": "C#",
- "rps": 6484,
- "avg_latency": "1.03s",
- "p99_latency": "5.00s",
- "cpu": "8786.3%",
- "memory": "2.8GiB",
+ "rps": 12968,
+ "avg_latency": "494.93ms",
+ "p99_latency": "3.44s",
+ "cpu": "8951.0%",
+ "memory": "1.6GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "343.98MB/s",
- "input_bw": "648.81MB/s",
- "reconnects": 18154,
- "status_2xx": 97271,
+ "bandwidth": "507.47MB/s",
+ "input_bw": "927.07MB/s",
+ "reconnects": 38878,
+ "status_2xx": 194533,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 52217,
- "tpl_json": 10046,
- "tpl_db": 9520,
- "tpl_upload": 8754,
- "tpl_compression": 16734
+ "tpl_baseline": 77200,
+ "tpl_json": 12899,
+ "tpl_db": 12659,
+ "tpl_upload": 13649,
+ "tpl_compression": 24273,
+ "tpl_static": 24495,
+ "tpl_async_db": 29358
},
{
"framework": "bun",
"language": "TS",
- "rps": 47876,
- "avg_latency": "311.06ms",
- "p99_latency": "1.15s",
- "cpu": "9584.7%",
- "memory": "10.8GiB",
+ "rps": 59832,
+ "avg_latency": "248.51ms",
+ "p99_latency": "921.90ms",
+ "cpu": "8770.7%",
+ "memory": "11.3GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.79GB/s",
- "input_bw": "4.68GB/s",
- "reconnects": 150834,
- "status_2xx": 718629,
+ "bandwidth": "1.68GB/s",
+ "input_bw": "4.18GB/s",
+ "reconnects": 188705,
+ "status_2xx": 898685,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 389264,
- "tpl_json": 63015,
- "tpl_db": 63318,
- "tpl_upload": 78275,
- "tpl_compression": 124757
+ "tpl_baseline": 342559,
+ "tpl_json": 56893,
+ "tpl_db": 59274,
+ "tpl_upload": 72096,
+ "tpl_compression": 110201,
+ "tpl_static": 122069,
+ "tpl_async_db": 135593
},
{
"framework": "chi",
"language": "Go",
- "rps": 21538,
- "avg_latency": "366.34ms",
- "p99_latency": "4.79s",
- "cpu": "8112.2%",
- "memory": "2.9GiB",
+ "rps": 37570,
+ "avg_latency": "362.28ms",
+ "p99_latency": "3.03s",
+ "cpu": "7953.1%",
+ "memory": "716.6MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "576.36MB/s",
- "input_bw": "2.10GB/s",
- "reconnects": 66477,
- "status_2xx": 323079,
+ "bandwidth": "800.78MB/s",
+ "input_bw": "2.62GB/s",
+ "reconnects": 116930,
+ "status_2xx": 563550,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 211641,
- "tpl_json": 47569,
- "tpl_db": 16739,
- "tpl_upload": 11425,
- "tpl_compression": 35705
+ "tpl_baseline": 274663,
+ "tpl_json": 48477,
+ "tpl_db": 27428,
+ "tpl_upload": 23837,
+ "tpl_compression": 46250,
+ "tpl_static": 62163,
+ "tpl_async_db": 80732
},
{
"framework": "deno",
"language": "TS",
- "rps": 30880,
- "avg_latency": "448.48ms",
- "p99_latency": "1.32s",
- "cpu": "8562.2%",
- "memory": "16.9GiB",
+ "rps": 45062,
+ "avg_latency": "311.47ms",
+ "p99_latency": "1.01s",
+ "cpu": "7552.2%",
+ "memory": "13.5GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.52GB/s",
- "input_bw": "3.02GB/s",
- "reconnects": 93960,
- "status_2xx": 463519,
+ "bandwidth": "1.66GB/s",
+ "input_bw": "3.15GB/s",
+ "reconnects": 138844,
+ "status_2xx": 677293,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 249444,
- "tpl_json": 41788,
- "tpl_db": 41856,
- "tpl_upload": 50234,
- "tpl_compression": 80197
+ "tpl_baseline": 261178,
+ "tpl_json": 42962,
+ "tpl_db": 42965,
+ "tpl_upload": 52045,
+ "tpl_compression": 83302,
+ "tpl_static": 92285,
+ "tpl_async_db": 102556
},
{
"framework": "Django",
"language": "Python",
- "rps": 24999,
- "avg_latency": "111.09ms",
- "p99_latency": "479.50ms",
- "cpu": "8599.9%",
- "memory": "8.5GiB",
+ "rps": 29630,
+ "avg_latency": "91.61ms",
+ "p99_latency": "343.60ms",
+ "cpu": "7804.5%",
+ "memory": "10.1GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.17GB/s",
- "input_bw": "2.44GB/s",
- "reconnects": 377675,
- "status_2xx": 375991,
+ "bandwidth": "1.04GB/s",
+ "input_bw": "2.07GB/s",
+ "reconnects": 446725,
+ "status_2xx": 445648,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 188050,
- "tpl_json": 37791,
- "tpl_db": 37869,
- "tpl_upload": 37350,
- "tpl_compression": 74931
+ "tpl_baseline": 159731,
+ "tpl_json": 32093,
+ "tpl_db": 32196,
+ "tpl_upload": 31833,
+ "tpl_compression": 63189,
+ "tpl_static": 63166,
+ "tpl_async_db": 63440
},
{
"framework": "drogon",
"language": "C++",
- "rps": 20646,
- "avg_latency": "637.13ms",
- "p99_latency": "4.77s",
- "cpu": "5700.1%",
- "memory": "930.8MiB",
+ "rps": 28359,
+ "avg_latency": "481.82ms",
+ "p99_latency": "3.82s",
+ "cpu": "5322.7%",
+ "memory": "810.6MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "297.91MB/s",
- "input_bw": "2.02GB/s",
- "reconnects": 63278,
- "status_2xx": 309701,
+ "bandwidth": "316.64MB/s",
+ "input_bw": "1.98GB/s",
+ "reconnects": 87694,
+ "status_2xx": 425387,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 192768,
- "tpl_json": 39654,
- "tpl_db": 39833,
- "tpl_upload": 17747,
- "tpl_compression": 19699
+ "tpl_baseline": 213602,
+ "tpl_json": 35349,
+ "tpl_db": 35374,
+ "tpl_upload": 21880,
+ "tpl_compression": 18697,
+ "tpl_static": 36409,
+ "tpl_async_db": 64076
},
{
"framework": "echo",
"language": "Go",
- "rps": 19677,
- "avg_latency": "378.54ms",
- "p99_latency": "4.44s",
- "cpu": "7967.4%",
- "memory": "2.3GiB",
+ "rps": 35941,
+ "avg_latency": "390.44ms",
+ "p99_latency": "2.56s",
+ "cpu": "8079.0%",
+ "memory": "1.6GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "569.09MB/s",
- "input_bw": "1.92GB/s",
- "reconnects": 61092,
- "status_2xx": 295156,
+ "bandwidth": "824.02MB/s",
+ "input_bw": "2.51GB/s",
+ "reconnects": 112717,
+ "status_2xx": 539120,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 190032,
- "tpl_json": 39304,
- "tpl_db": 17366,
- "tpl_upload": 12878,
- "tpl_compression": 35576
+ "tpl_baseline": 245946,
+ "tpl_json": 40578,
+ "tpl_db": 30877,
+ "tpl_upload": 29811,
+ "tpl_compression": 48090,
+ "tpl_static": 58630,
+ "tpl_async_db": 85188
},
{
"framework": "Elysia",
"language": "TS",
- "rps": 46884,
- "avg_latency": "317.00ms",
- "p99_latency": "1.16s",
- "cpu": "9617.5%",
- "memory": "13.9GiB",
+ "rps": 58629,
+ "avg_latency": "254.01ms",
+ "p99_latency": "951.00ms",
+ "cpu": "8945.9%",
+ "memory": "14.5GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.74GB/s",
- "input_bw": "4.58GB/s",
- "reconnects": 147768,
- "status_2xx": 703733,
+ "bandwidth": "1.65GB/s",
+ "input_bw": "4.09GB/s",
+ "reconnects": 184429,
+ "status_2xx": 880026,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 379956,
- "tpl_json": 62250,
- "tpl_db": 62566,
- "tpl_upload": 77240,
- "tpl_compression": 121721
+ "tpl_baseline": 334569,
+ "tpl_json": 56249,
+ "tpl_db": 58741,
+ "tpl_upload": 70565,
+ "tpl_compression": 107743,
+ "tpl_static": 119677,
+ "tpl_async_db": 132482
},
{
"framework": "Express",
"language": "JS",
- "rps": 33499,
- "avg_latency": "97.04ms",
- "p99_latency": "1.05s",
- "cpu": "10451.2%",
- "memory": "9.7GiB",
+ "rps": 40940,
+ "avg_latency": "50.56ms",
+ "p99_latency": "524.10ms",
+ "cpu": "9352.8%",
+ "memory": "9.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.28GB/s",
- "input_bw": "3.27GB/s",
- "reconnects": 110702,
- "status_2xx": 502834,
+ "bandwidth": "1.19GB/s",
+ "input_bw": "2.86GB/s",
+ "reconnects": 133729,
+ "status_2xx": 614523,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 276360,
- "tpl_json": 43635,
- "tpl_db": 43589,
- "tpl_upload": 50488,
- "tpl_compression": 88762
+ "tpl_baseline": 237103,
+ "tpl_json": 37931,
+ "tpl_db": 37938,
+ "tpl_upload": 43365,
+ "tpl_compression": 77281,
+ "tpl_static": 85947,
+ "tpl_async_db": 94958
},
{
"framework": "FastAPI",
"language": "Python",
- "rps": 32134,
- "avg_latency": "210.98ms",
- "p99_latency": "1.69s",
- "cpu": "10566.2%",
- "memory": "11.5GiB",
+ "rps": 43239,
+ "avg_latency": "145.57ms",
+ "p99_latency": "1.29s",
+ "cpu": "10011.7%",
+ "memory": "11.4GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.26GB/s",
- "input_bw": "3.14GB/s",
- "reconnects": 103777,
- "status_2xx": 482334,
+ "bandwidth": "1.28GB/s",
+ "input_bw": "3.02GB/s",
+ "reconnects": 138706,
+ "status_2xx": 649020,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 262922,
- "tpl_json": 42349,
- "tpl_db": 42571,
- "tpl_upload": 52052,
- "tpl_compression": 82440
+ "tpl_baseline": 251331,
+ "tpl_json": 40752,
+ "tpl_db": 40782,
+ "tpl_upload": 50028,
+ "tpl_compression": 78907,
+ "tpl_static": 88474,
+ "tpl_async_db": 98746
},
{
"framework": "Fastify",
"language": "JS",
- "rps": 36723,
- "avg_latency": "92.86ms",
- "p99_latency": "1.08s",
- "cpu": "9991.6%",
- "memory": "10.0GiB",
- "connections": 16384,
- "threads": 64,
- "duration": "5s",
- "pipeline": 1,
- "bandwidth": "1.42GB/s",
- "input_bw": "3.59GB/s",
- "reconnects": 121627,
- "status_2xx": 551222,
- "status_3xx": 0,
- "status_4xx": 0,
- "status_5xx": 0,
- "tpl_baseline": 303796,
- "tpl_json": 48106,
- "tpl_db": 47765,
- "tpl_upload": 52860,
- "tpl_compression": 98695
- },
- {
- "framework": "fiber",
- "language": "Go",
- "rps": 29689,
- "avg_latency": "221.71ms",
- "p99_latency": "1.53s",
- "cpu": "8810.8%",
- "memory": "3.6GiB",
+ "rps": 48209,
+ "avg_latency": "38.74ms",
+ "p99_latency": "318.80ms",
+ "cpu": "9027.7%",
+ "memory": "9.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.15GB/s",
- "input_bw": "2.90GB/s",
- "reconnects": 96685,
- "status_2xx": 445348,
+ "bandwidth": "1.38GB/s",
+ "input_bw": "3.37GB/s",
+ "reconnects": 156427,
+ "status_2xx": 723620,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 241714,
- "tpl_json": 41315,
- "tpl_db": 40971,
- "tpl_upload": 45894,
- "tpl_compression": 75454
+ "tpl_baseline": 279450,
+ "tpl_json": 44692,
+ "tpl_db": 44612,
+ "tpl_upload": 52622,
+ "tpl_compression": 90103,
+ "tpl_static": 100520,
+ "tpl_async_db": 111621
},
{
- "framework": "flask",
+ "framework": "FastPySGI-ASGI",
"language": "Python",
- "rps": 24735,
- "avg_latency": "111.74ms",
- "p99_latency": "383.80ms",
- "cpu": "8864.8%",
- "memory": "7.1GiB",
+ "rps": 39885,
+ "avg_latency": "377.00ms",
+ "p99_latency": "2.27s",
+ "cpu": "10525.0%",
+ "memory": "2.7GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.16GB/s",
- "input_bw": "2.42GB/s",
- "reconnects": 374026,
- "status_2xx": 372022,
+ "bandwidth": "1.59GB/s",
+ "input_bw": "3.90GB/s",
+ "reconnects": 129127,
+ "status_2xx": 599084,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 186189,
- "tpl_json": 37448,
- "tpl_db": 37521,
- "tpl_upload": 36802,
- "tpl_compression": 74062
+ "tpl_baseline": 325092,
+ "tpl_json": 52254,
+ "tpl_db": 52737,
+ "tpl_upload": 65253,
+ "tpl_compression": 103748
},
{
- "framework": "GenHTTP",
- "language": "C#",
- "rps": 8907,
- "avg_latency": "1.09s",
- "p99_latency": "5.00s",
- "cpu": "10031.1%",
- "memory": "5.1GiB",
+ "framework": "FastPySGI-WSGI",
+ "language": "Python",
+ "rps": 40993,
+ "avg_latency": "365.45ms",
+ "p99_latency": "2.36s",
+ "cpu": "10677.8%",
+ "memory": "3.5GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "517.36MB/s",
- "input_bw": "891.26MB/s",
- "reconnects": 25353,
- "status_2xx": 133607,
+ "bandwidth": "1.64GB/s",
+ "input_bw": "4.01GB/s",
+ "reconnects": 133282,
+ "status_2xx": 614907,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 71180,
- "tpl_json": 12004,
- "tpl_db": 11917,
- "tpl_upload": 12317,
- "tpl_compression": 26189
+ "tpl_baseline": 333527,
+ "tpl_json": 53361,
+ "tpl_db": 53645,
+ "tpl_upload": 67402,
+ "tpl_compression": 106972
},
{
- "framework": "gin",
+ "framework": "fiber",
"language": "Go",
- "rps": 21390,
- "avg_latency": "366.77ms",
- "p99_latency": "5.00s",
- "cpu": "8101.2%",
- "memory": "958.2MiB",
+ "rps": 58662,
+ "avg_latency": "253.28ms",
+ "p99_latency": "1.48s",
+ "cpu": "7385.7%",
+ "memory": "1023.0MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "545.64MB/s",
- "input_bw": "2.09GB/s",
- "reconnects": 65443,
- "status_2xx": 321072,
+ "bandwidth": "1.39GB/s",
+ "input_bw": "4.10GB/s",
+ "reconnects": 184346,
+ "status_2xx": 880524,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 208486,
- "tpl_json": 47780,
- "tpl_db": 21533,
- "tpl_upload": 9744,
- "tpl_compression": 33529
+ "tpl_baseline": 368266,
+ "tpl_json": 69228,
+ "tpl_db": 63425,
+ "tpl_upload": 76605,
+ "tpl_compression": 92917,
+ "tpl_static": 90071,
+ "tpl_async_db": 120012
},
{
- "framework": "go-fasthttp",
- "language": "Go",
- "rps": 54255,
- "avg_latency": "229.98ms",
- "p99_latency": "3.17s",
- "cpu": "8764.2%",
- "memory": "88.0GiB",
+ "framework": "flask",
+ "language": "Python",
+ "rps": 31044,
+ "avg_latency": "93.40ms",
+ "p99_latency": "352.20ms",
+ "cpu": "7916.9%",
+ "memory": "8.9GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.69GB/s",
- "input_bw": "5.30GB/s",
- "reconnects": 168363,
- "status_2xx": 814925,
+ "bandwidth": "1.08GB/s",
+ "input_bw": "2.17GB/s",
+ "reconnects": 468380,
+ "status_2xx": 467227,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 462808,
- "tpl_json": 87971,
- "tpl_db": 75916,
- "tpl_upload": 68199,
- "tpl_compression": 120031
+ "tpl_baseline": 167536,
+ "tpl_json": 33662,
+ "tpl_db": 33644,
+ "tpl_upload": 33141,
+ "tpl_compression": 66268,
+ "tpl_static": 66330,
+ "tpl_async_db": 66646
},
{
- "framework": "Hono (Bun)",
- "language": "TS",
- "rps": 44429,
- "avg_latency": "334.37ms",
- "p99_latency": "1.25s",
- "cpu": "9639.8%",
- "memory": "11.7GiB",
+ "framework": "GenHTTP",
+ "language": "C#",
+ "rps": 11443,
+ "avg_latency": "998.85ms",
+ "p99_latency": "5.00s",
+ "cpu": "9335.8%",
+ "memory": "5.0GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.66GB/s",
- "input_bw": "4.34GB/s",
- "reconnects": 139736,
- "status_2xx": 666882,
+ "bandwidth": "481.68MB/s",
+ "input_bw": "818.05MB/s",
+ "reconnects": 31753,
+ "status_2xx": 171653,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 358080,
- "tpl_json": 58181,
- "tpl_db": 60002,
- "tpl_upload": 74946,
- "tpl_compression": 115673
+ "tpl_baseline": 65649,
+ "tpl_json": 11033,
+ "tpl_db": 10926,
+ "tpl_upload": 11010,
+ "tpl_compression": 23317,
+ "tpl_static": 23813,
+ "tpl_async_db": 25905
},
{
- "framework": "hono (node)",
- "language": "JS",
- "rps": 32193,
- "avg_latency": "91.45ms",
- "p99_latency": "1.29s",
- "cpu": "10176.8%",
- "memory": "10.6GiB",
+ "framework": "gin",
+ "language": "Go",
+ "rps": 38010,
+ "avg_latency": "363.06ms",
+ "p99_latency": "3.02s",
+ "cpu": "8202.3%",
+ "memory": "1021.0MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.24GB/s",
- "input_bw": "3.15GB/s",
- "reconnects": 106995,
- "status_2xx": 483225,
+ "bandwidth": "825.44MB/s",
+ "input_bw": "2.65GB/s",
+ "reconnects": 118500,
+ "status_2xx": 570533,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 265675,
- "tpl_json": 42252,
- "tpl_db": 42118,
- "tpl_upload": 47011,
- "tpl_compression": 86169
+ "tpl_baseline": 277523,
+ "tpl_json": 48454,
+ "tpl_db": 28555,
+ "tpl_upload": 25173,
+ "tpl_compression": 47855,
+ "tpl_static": 63058,
+ "tpl_async_db": 79915
},
{
- "framework": "kemal",
- "language": "Crystal",
- "rps": 36991,
- "avg_latency": "391.78ms",
- "p99_latency": "1.03s",
- "cpu": "10359.6%",
- "memory": "24.6GiB",
+ "framework": "Hono (Bun)",
+ "language": "TS",
+ "rps": 56284,
+ "avg_latency": "263.54ms",
+ "p99_latency": "981.90ms",
+ "cpu": "8745.3%",
+ "memory": "12.3GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.50GB/s",
- "input_bw": "3.61GB/s",
- "reconnects": 114781,
- "status_2xx": 555248,
+ "bandwidth": "1.58GB/s",
+ "input_bw": "3.93GB/s",
+ "reconnects": 177127,
+ "status_2xx": 844824,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 298485,
- "tpl_json": 48263,
- "tpl_db": 48964,
- "tpl_upload": 61882,
- "tpl_compression": 97654
+ "tpl_baseline": 320242,
+ "tpl_json": 55048,
+ "tpl_db": 57758,
+ "tpl_upload": 68267,
+ "tpl_compression": 102906,
+ "tpl_static": 114043,
+ "tpl_async_db": 126560
},
{
- "framework": "Koa",
+ "framework": "hono (node)",
"language": "JS",
- "rps": 39818,
- "avg_latency": "78.27ms",
- "p99_latency": "991.90ms",
- "cpu": "9749.5%",
- "memory": "10.0GiB",
+ "rps": 43152,
+ "avg_latency": "42.79ms",
+ "p99_latency": "460.50ms",
+ "cpu": "9262.3%",
+ "memory": "10.1GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.54GB/s",
- "input_bw": "3.89GB/s",
- "reconnects": 131791,
- "status_2xx": 597675,
+ "bandwidth": "1.25GB/s",
+ "input_bw": "3.01GB/s",
+ "reconnects": 140669,
+ "status_2xx": 647722,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 327623,
- "tpl_json": 51757,
- "tpl_db": 51462,
- "tpl_upload": 59617,
- "tpl_compression": 107216
+ "tpl_baseline": 249223,
+ "tpl_json": 39931,
+ "tpl_db": 39950,
+ "tpl_upload": 47441,
+ "tpl_compression": 81453,
+ "tpl_static": 90103,
+ "tpl_async_db": 99621
},
{
- "framework": "nginx-openresty",
- "language": "Lua",
- "rps": 23560,
- "avg_latency": "613.47ms",
- "p99_latency": "2.37s",
- "cpu": "11606.8%",
- "memory": "7.1GiB",
+ "framework": "hummingbird",
+ "language": "Swift",
+ "rps": 19633,
+ "avg_latency": "35.50ms",
+ "p99_latency": "470.30ms",
+ "cpu": "9200.1%",
+ "memory": "1013.0MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "828.39MB/s",
- "input_bw": "2.30GB/s",
- "reconnects": 70274,
- "status_2xx": 353645,
+ "bandwidth": "664.70MB/s",
+ "input_bw": "1.37GB/s",
+ "reconnects": 69894,
+ "status_2xx": 294696,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 194868,
- "tpl_json": 36048,
- "tpl_db": 35932,
- "tpl_upload": 34730,
- "tpl_compression": 52067
+ "tpl_baseline": 109018,
+ "tpl_json": 20014,
+ "tpl_db": 19917,
+ "tpl_upload": 20175,
+ "tpl_compression": 40670,
+ "tpl_static": 41443,
+ "tpl_async_db": 43459
},
{
- "framework": "node",
- "language": "JS",
- "rps": 43317,
- "avg_latency": "84.65ms",
- "p99_latency": "918.80ms",
- "cpu": "9877.9%",
- "memory": "9.1GiB",
+ "framework": "kemal",
+ "language": "Crystal",
+ "rps": 54605,
+ "avg_latency": "267.68ms",
+ "p99_latency": "789.90ms",
+ "cpu": "10170.0%",
+ "memory": "18.5GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.65GB/s",
- "input_bw": "4.23GB/s",
- "reconnects": 142870,
- "status_2xx": 650198,
+ "bandwidth": "1.66GB/s",
+ "input_bw": "3.81GB/s",
+ "reconnects": 170548,
+ "status_2xx": 819077,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 357014,
- "tpl_json": 56809,
- "tpl_db": 56661,
- "tpl_upload": 64504,
- "tpl_compression": 115210
+ "tpl_baseline": 314872,
+ "tpl_json": 50955,
+ "tpl_db": 51660,
+ "tpl_upload": 64932,
+ "tpl_compression": 101350,
+ "tpl_static": 110982,
+ "tpl_async_db": 124326
},
{
- "framework": "phoenix",
- "language": "Elixir",
- "rps": 21376,
- "avg_latency": "227.06ms",
- "p99_latency": "5.00s",
- "cpu": "5899.5%",
- "memory": "4.7GiB",
+ "framework": "Koa",
+ "language": "JS",
+ "rps": 51767,
+ "avg_latency": "40.23ms",
+ "p99_latency": "364.60ms",
+ "cpu": "8964.4%",
+ "memory": "9.5GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "497.85MB/s",
- "input_bw": "2.09GB/s",
- "reconnects": 68902,
- "status_2xx": 320652,
+ "bandwidth": "1.49GB/s",
+ "input_bw": "3.61GB/s",
+ "reconnects": 168347,
+ "status_2xx": 777025,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 228564,
- "tpl_json": 54596,
- "tpl_db": 3050,
- "tpl_upload": 3696,
- "tpl_compression": 30746
+ "tpl_baseline": 299373,
+ "tpl_json": 47737,
+ "tpl_db": 47536,
+ "tpl_upload": 56948,
+ "tpl_compression": 97340,
+ "tpl_static": 108202,
+ "tpl_async_db": 119889
},
{
- "framework": "rocket",
- "language": "Rust",
- "rps": 34730,
- "avg_latency": "137.22ms",
- "p99_latency": "1.31s",
- "cpu": "5381.5%",
- "memory": "331.2MiB",
+ "framework": "ktor",
+ "language": "Kotlin",
+ "rps": 22013,
+ "avg_latency": "664.19ms",
+ "p99_latency": "1.65s",
+ "cpu": "9817.2%",
+ "memory": "13.1GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.48GB/s",
- "input_bw": "3.39GB/s",
- "reconnects": 113341,
- "status_2xx": 520951,
+ "bandwidth": "509.21MB/s",
+ "input_bw": "1.54GB/s",
+ "reconnects": 64160,
+ "status_2xx": 330207,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 282998,
- "tpl_json": 45031,
- "tpl_db": 45054,
- "tpl_upload": 56773,
- "tpl_compression": 91095
+ "tpl_baseline": 130646,
+ "tpl_json": 21348,
+ "tpl_db": 21385,
+ "tpl_upload": 24759,
+ "tpl_compression": 38364,
+ "tpl_static": 42965,
+ "tpl_async_db": 50740
},
{
- "framework": "salvo",
- "language": "Rust",
- "rps": 42097,
- "avg_latency": "157.06ms",
- "p99_latency": "1.31s",
- "cpu": "8449.5%",
- "memory": "2.0GiB",
+ "framework": "nginx-openresty",
+ "language": "Lua",
+ "rps": 31552,
+ "avg_latency": "466.45ms",
+ "p99_latency": "1.73s",
+ "cpu": "10776.9%",
+ "memory": "6.3GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.79GB/s",
- "input_bw": "4.11GB/s",
- "reconnects": 136975,
- "status_2xx": 632300,
+ "bandwidth": "859.01MB/s",
+ "input_bw": "2.20GB/s",
+ "reconnects": 95050,
+ "status_2xx": 473605,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 343082,
- "tpl_json": 55508,
- "tpl_db": 55515,
- "tpl_upload": 67174,
- "tpl_compression": 111021
+ "tpl_baseline": 198300,
+ "tpl_json": 32650,
+ "tpl_db": 32429,
+ "tpl_upload": 33811,
+ "tpl_compression": 50997,
+ "tpl_static": 57567,
+ "tpl_async_db": 67851
},
{
- "framework": "Starlette",
- "language": "Python",
- "rps": 32617,
- "avg_latency": "206.76ms",
- "p99_latency": "1.72s",
- "cpu": "10514.6%",
+ "framework": "node",
+ "language": "JS",
+ "rps": 55109,
+ "avg_latency": "42.03ms",
+ "p99_latency": "467.30ms",
+ "cpu": "8570.8%",
"memory": "8.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.28GB/s",
- "input_bw": "3.19GB/s",
- "reconnects": 105378,
- "status_2xx": 489592,
+ "bandwidth": "1.59GB/s",
+ "input_bw": "3.85GB/s",
+ "reconnects": 179270,
+ "status_2xx": 827191,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 266039,
- "tpl_json": 43309,
- "tpl_db": 43542,
- "tpl_upload": 53060,
- "tpl_compression": 83642
+ "tpl_baseline": 318909,
+ "tpl_json": 50900,
+ "tpl_db": 50834,
+ "tpl_upload": 59710,
+ "tpl_compression": 104117,
+ "tpl_static": 115228,
+ "tpl_async_db": 127493
},
{
- "framework": "ulfius",
- "language": "C",
- "rps": 6368,
- "avg_latency": "67.98ms",
- "p99_latency": "652.60ms",
- "cpu": "1427.0%",
- "memory": "657.5MiB",
+ "framework": "ntex-tokio",
+ "language": "Rust",
+ "rps": 57790,
+ "avg_latency": "244.68ms",
+ "p99_latency": "999.60ms",
+ "cpu": "8425.4%",
+ "memory": "3.3GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "286.10MB/s",
- "input_bw": "637.20MB/s",
- "reconnects": 509454,
- "status_2xx": 95523,
+ "bandwidth": "1.81GB/s",
+ "input_bw": "4.03GB/s",
+ "reconnects": 181334,
+ "status_2xx": 868013,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 51614,
- "tpl_json": 8419,
- "tpl_db": 8736,
- "tpl_upload": 10280,
- "tpl_compression": 16474
+ "tpl_baseline": 337784,
+ "tpl_json": 54372,
+ "tpl_db": 55020,
+ "tpl_upload": 64952,
+ "tpl_compression": 105512,
+ "tpl_static": 118304,
+ "tpl_async_db": 132069
},
{
- "framework": "ultimate-express",
- "language": "JS",
- "rps": 46703,
- "avg_latency": "318.46ms",
- "p99_latency": "1.29s",
- "cpu": "10178.5%",
- "memory": "14.3GiB",
+ "framework": "phoenix",
+ "language": "Elixir",
+ "rps": 31451,
+ "avg_latency": "283.07ms",
+ "p99_latency": "5.00s",
+ "cpu": "5508.8%",
+ "memory": "4.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.75GB/s",
- "input_bw": "4.56GB/s",
- "reconnects": 147952,
- "status_2xx": 701026,
+ "bandwidth": "425.63MB/s",
+ "input_bw": "2.20GB/s",
+ "reconnects": 97427,
+ "status_2xx": 471765,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 379886,
- "tpl_json": 61412,
- "tpl_db": 62000,
- "tpl_upload": 75837,
- "tpl_compression": 121891
+ "tpl_baseline": 265809,
+ "tpl_json": 54389,
+ "tpl_db": 12159,
+ "tpl_upload": 2506,
+ "tpl_compression": 22704,
+ "tpl_static": 43888,
+ "tpl_async_db": 70310
},
{
- "framework": "FastPySGI-ASGI",
- "language": "Python",
- "rps": 39885,
- "avg_latency": "377.00ms",
- "p99_latency": "2.27s",
- "cpu": "10525.0%",
- "memory": "2.7GiB",
+ "framework": "quarkus-jvm",
+ "language": "Java",
+ "rps": 42241,
+ "avg_latency": "343.50ms",
+ "p99_latency": "2.02s",
+ "cpu": "7861.4%",
+ "memory": "16.9GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.59GB/s",
- "input_bw": "3.90GB/s",
- "reconnects": 129127,
- "status_2xx": 599084,
+ "bandwidth": "1.05GB/s",
+ "input_bw": "2.95GB/s",
+ "reconnects": 129665,
+ "status_2xx": 634039,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 325092,
- "tpl_json": 52254,
- "tpl_db": 52737,
- "tpl_upload": 65253,
- "tpl_compression": 103748
+ "tpl_baseline": 248578,
+ "tpl_json": 53406,
+ "tpl_db": 51798,
+ "tpl_upload": 44893,
+ "tpl_compression": 62133,
+ "tpl_static": 88515,
+ "tpl_async_db": 84716
},
{
- "framework": "FastPySGI-WSGI",
- "language": "Python",
- "rps": 40993,
- "avg_latency": "365.45ms",
- "p99_latency": "2.36s",
- "cpu": "10677.8%",
- "memory": "3.5GiB",
+ "framework": "Rails",
+ "language": "Ruby",
+ "rps": 29190,
+ "avg_latency": "486.18ms",
+ "p99_latency": "1.50s",
+ "cpu": "9376.1%",
+ "memory": "30.0GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.64GB/s",
- "input_bw": "4.01GB/s",
- "reconnects": 133282,
- "status_2xx": 614907,
+ "bandwidth": "895.60MB/s",
+ "input_bw": "2.04GB/s",
+ "reconnects": 87504,
+ "status_2xx": 438736,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 333527,
- "tpl_json": 53361,
- "tpl_db": 53645,
- "tpl_upload": 67402,
- "tpl_compression": 106972
+ "tpl_baseline": 171282,
+ "tpl_json": 27982,
+ "tpl_db": 27818,
+ "tpl_upload": 32191,
+ "tpl_compression": 53755,
+ "tpl_static": 59345,
+ "tpl_async_db": 66363
},
{
- "framework": "hummingbird",
- "language": "Swift",
- "rps": 13980,
- "avg_latency": "62.73ms",
- "p99_latency": "906.50ms",
- "cpu": "10177.0%",
- "memory": "1.2GiB",
+ "framework": "rocket",
+ "language": "Rust",
+ "rps": 25410,
+ "avg_latency": "38.17ms",
+ "p99_latency": "484.30ms",
+ "cpu": "3083.0%",
+ "memory": "270.9MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "634.24MB/s",
- "input_bw": "1.37GB/s",
- "reconnects": 50115,
- "status_2xx": 209711,
+ "bandwidth": "865.39MB/s",
+ "input_bw": "1.77GB/s",
+ "reconnects": 83619,
+ "status_2xx": 381153,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 110444,
- "tpl_json": 19882,
- "tpl_db": 19639,
- "tpl_upload": 19285,
- "tpl_compression": 40461
+ "tpl_baseline": 146433,
+ "tpl_json": 23102,
+ "tpl_db": 22953,
+ "tpl_upload": 24806,
+ "tpl_compression": 49268,
+ "tpl_static": 54564,
+ "tpl_async_db": 60027
},
{
- "framework": "ktor",
- "language": "Kotlin",
- "rps": 15967,
- "avg_latency": "902.52ms",
- "p99_latency": "2.06s",
- "cpu": "9767.7%",
- "memory": "13.9GiB",
+ "framework": "salvo",
+ "language": "Rust",
+ "rps": 57485,
+ "avg_latency": "26.28ms",
+ "p99_latency": "236.90ms",
+ "cpu": "7462.9%",
+ "memory": "1.1GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "481.87MB/s",
- "input_bw": "1.56GB/s",
- "reconnects": 44810,
- "status_2xx": 239506,
+ "bandwidth": "1.86GB/s",
+ "input_bw": "4.01GB/s",
+ "reconnects": 187006,
+ "status_2xx": 862859,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 130943,
- "tpl_json": 22033,
- "tpl_db": 22095,
- "tpl_upload": 25149,
- "tpl_compression": 39286
+ "tpl_baseline": 332612,
+ "tpl_json": 53175,
+ "tpl_db": 52748,
+ "tpl_upload": 61609,
+ "tpl_compression": 108485,
+ "tpl_static": 120594,
+ "tpl_async_db": 133636
},
{
- "framework": "ntex-tokio",
- "language": "Rust",
- "rps": 26576,
- "avg_latency": "492.84ms",
- "p99_latency": "2.32s",
- "cpu": "6923.3%",
- "memory": "5.1GiB",
+ "framework": "Sinatra",
+ "language": "Ruby",
+ "rps": 32870,
+ "avg_latency": "415.37ms",
+ "p99_latency": "2.22s",
+ "cpu": "8676.7%",
+ "memory": "27.9GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "4.75GB/s",
- "input_bw": "2.60GB/s",
- "reconnects": 82330,
- "status_2xx": 399717,
+ "bandwidth": "990.14MB/s",
+ "input_bw": "2.29GB/s",
+ "reconnects": 99828,
+ "status_2xx": 493383,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 216863,
- "tpl_json": 36374,
- "tpl_db": 37197,
- "tpl_upload": 41225,
- "tpl_compression": 68058
+ "tpl_baseline": 192753,
+ "tpl_json": 31807,
+ "tpl_db": 31892,
+ "tpl_upload": 35878,
+ "tpl_compression": 59472,
+ "tpl_static": 66837,
+ "tpl_async_db": 74744
},
{
- "framework": "quarkus-jvm",
+ "framework": "spring-jvm",
"language": "Java",
- "rps": 39486,
- "avg_latency": "320.07ms",
- "p99_latency": "2.93s",
- "cpu": "8489.8%",
- "memory": "20.7GiB",
+ "rps": 47780,
+ "avg_latency": "312.52ms",
+ "p99_latency": "441.60ms",
+ "cpu": "9496.9%",
+ "memory": "8.2GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.08GB/s",
- "input_bw": "3.86GB/s",
- "reconnects": 123801,
- "status_2xx": 592690,
+ "bandwidth": "1.43GB/s",
+ "input_bw": "3.34GB/s",
+ "reconnects": 147883,
+ "status_2xx": 716701,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 341892,
- "tpl_json": 72563,
- "tpl_db": 66946,
- "tpl_upload": 43572,
- "tpl_compression": 67717
+ "tpl_baseline": 276732,
+ "tpl_json": 44468,
+ "tpl_db": 44293,
+ "tpl_upload": 54554,
+ "tpl_compression": 87760,
+ "tpl_static": 98695,
+ "tpl_async_db": 110199
},
{
- "framework": "Rails",
- "language": "Ruby",
- "rps": 22252,
- "avg_latency": "629.81ms",
- "p99_latency": "1.89s",
- "cpu": "9844.7%",
- "memory": "36.4GiB",
+ "framework": "Starlette",
+ "language": "Python",
+ "rps": 45201,
+ "avg_latency": "135.00ms",
+ "p99_latency": "1.11s",
+ "cpu": "9988.0%",
+ "memory": "8.8GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "910.16MB/s",
- "input_bw": "2.17GB/s",
- "reconnects": 65502,
- "status_2xx": 334006,
+ "bandwidth": "1.33GB/s",
+ "input_bw": "3.16GB/s",
+ "reconnects": 145049,
+ "status_2xx": 678924,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 179210,
- "tpl_json": 30239,
- "tpl_db": 30375,
- "tpl_upload": 36133,
- "tpl_compression": 58049
+ "tpl_baseline": 263828,
+ "tpl_json": 42392,
+ "tpl_db": 42449,
+ "tpl_upload": 51962,
+ "tpl_compression": 81769,
+ "tpl_static": 92395,
+ "tpl_async_db": 104129
},
{
- "framework": "Sinatra",
- "language": "Ruby",
- "rps": 25797,
- "avg_latency": "522.55ms",
- "p99_latency": "2.56s",
- "cpu": "9268.3%",
- "memory": "31.4GiB",
+ "framework": "ulfius",
+ "language": "C",
+ "rps": 8074,
+ "avg_latency": "65.41ms",
+ "p99_latency": "511.00ms",
+ "cpu": "1238.9%",
+ "memory": "513.0MiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.02GB/s",
- "input_bw": "2.52GB/s",
- "reconnects": 77497,
- "status_2xx": 387221,
+ "bandwidth": "268.14MB/s",
+ "input_bw": "577.20MB/s",
+ "reconnects": 521551,
+ "status_2xx": 121113,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 209988,
- "tpl_json": 35133,
- "tpl_db": 35356,
- "tpl_upload": 40018,
- "tpl_compression": 66726
+ "tpl_baseline": 46966,
+ "tpl_json": 7841,
+ "tpl_db": 7470,
+ "tpl_upload": 9305,
+ "tpl_compression": 14610,
+ "tpl_static": 16142,
+ "tpl_async_db": 18779
},
{
- "framework": "spring-jvm",
- "language": "Java",
- "rps": 35087,
- "avg_latency": "420.78ms",
- "p99_latency": "605.30ms",
- "cpu": "9537.3%",
- "memory": "8.4GiB",
+ "framework": "ultimate-express",
+ "language": "JS",
+ "rps": 60783,
+ "avg_latency": "246.47ms",
+ "p99_latency": "991.40ms",
+ "cpu": "9498.0%",
+ "memory": "13.1GiB",
"connections": 16384,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.41GB/s",
- "input_bw": "3.43GB/s",
- "reconnects": 108134,
- "status_2xx": 526661,
+ "bandwidth": "1.72GB/s",
+ "input_bw": "4.24GB/s",
+ "reconnects": 191826,
+ "status_2xx": 912365,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 285262,
- "tpl_json": 45987,
- "tpl_db": 46164,
- "tpl_upload": 56961,
- "tpl_compression": 92287
- },
- {
- "framework": "workerman",
- "language": "PHP",
- "rps": 31108,
- "avg_latency": "423.03ms",
- "p99_latency": "2.73s",
- "cpu": "10277.1%",
- "memory": "3.0GiB",
- "connections": 16384,
- "threads": 64,
- "duration": "5s",
- "pipeline": 1,
- "bandwidth": "1.41GB/s",
- "input_bw": "3.04GB/s",
- "reconnects": 113667,
- "status_2xx": 466942,
- "status_3xx": 0,
- "status_4xx": 58531,
- "status_5xx": 0,
- "tpl_baseline": 280086,
- "tpl_json": 47990,
- "tpl_db": 48586,
- "tpl_upload": 6,
- "tpl_compression": 90274
+ "tpl_baseline": 349709,
+ "tpl_json": 57232,
+ "tpl_db": 58137,
+ "tpl_upload": 70576,
+ "tpl_compression": 112330,
+ "tpl_static": 125439,
+ "tpl_async_db": 138942
}
]
\ No newline at end of file
diff --git a/site/data/mixed-4096.json b/site/data/mixed-4096.json
index 24a29769..2c4c33ad 100644
--- a/site/data/mixed-4096.json
+++ b/site/data/mixed-4096.json
@@ -1,977 +1,1022 @@
[
+ {
+ "framework": "go-fasthttp",
+ "language": "Go",
+ "rps": 49427,
+ "avg_latency": "71.02ms",
+ "p99_latency": "718.70ms",
+ "cpu": "10302.9%",
+ "memory": "80.7GiB",
+ "connections": 4096,
+ "threads": 64,
+ "duration": "5s",
+ "pipeline": 1,
+ "bandwidth": "1.78GB/s",
+ "input_bw": "4.83GB/s",
+ "reconnects": 160024,
+ "status_2xx": 741911,
+ "status_3xx": 0,
+ "status_4xx": 0,
+ "status_5xx": 0,
+ "tpl_baseline": 398728,
+ "tpl_json": 65805,
+ "tpl_db": 66562,
+ "tpl_upload": 82319,
+ "tpl_compression": 128496
+ },
{
"framework": "actix",
"language": "Rust",
- "rps": 38230,
- "avg_latency": "100.40ms",
- "p99_latency": "1.13s",
- "cpu": "10320.9%",
- "memory": "5.2GiB",
+ "rps": 68339,
+ "avg_latency": "56.22ms",
+ "p99_latency": "481.60ms",
+ "cpu": "9525.9%",
+ "memory": "3.8GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.59GB/s",
- "input_bw": "3.74GB/s",
- "reconnects": 123967,
- "status_2xx": 573844,
+ "bandwidth": "2.13GB/s",
+ "input_bw": "4.77GB/s",
+ "reconnects": 219877,
+ "status_2xx": 1025772,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 307797,
- "tpl_json": 51418,
- "tpl_db": 51966,
- "tpl_upload": 64441,
- "tpl_compression": 98222
+ "tpl_baseline": 397449,
+ "tpl_json": 64349,
+ "tpl_db": 64559,
+ "tpl_upload": 79828,
+ "tpl_compression": 124409,
+ "tpl_static": 138960,
+ "tpl_async_db": 156218
},
{
"framework": "aspnet-minimal",
"language": "C#",
- "rps": 6197,
- "avg_latency": "527.41ms",
- "p99_latency": "5.00s",
- "cpu": "8501.5%",
- "memory": "1.9GiB",
+ "rps": 11928,
+ "avg_latency": "253.83ms",
+ "p99_latency": "2.08s",
+ "cpu": "10322.7%",
+ "memory": "1015.0MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "311.67MB/s",
- "input_bw": "620.09MB/s",
- "reconnects": 19161,
- "status_2xx": 92963,
+ "bandwidth": "445.63MB/s",
+ "input_bw": "852.72MB/s",
+ "reconnects": 37218,
+ "status_2xx": 178928,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 50052,
- "tpl_json": 8968,
- "tpl_db": 8814,
- "tpl_upload": 9467,
- "tpl_compression": 15662
+ "tpl_baseline": 70808,
+ "tpl_json": 12314,
+ "tpl_db": 12226,
+ "tpl_upload": 14547,
+ "tpl_compression": 21368,
+ "tpl_static": 22019,
+ "tpl_async_db": 25646
},
{
"framework": "bun",
"language": "TS",
- "rps": 52274,
- "avg_latency": "72.41ms",
- "p99_latency": "332.10ms",
- "cpu": "10653.1%",
- "memory": "6.1GiB",
+ "rps": 66076,
+ "avg_latency": "57.60ms",
+ "p99_latency": "293.80ms",
+ "cpu": "9973.1%",
+ "memory": "6.0GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.93GB/s",
- "input_bw": "5.11GB/s",
- "reconnects": 169316,
- "status_2xx": 784638,
+ "bandwidth": "1.84GB/s",
+ "input_bw": "4.61GB/s",
+ "reconnects": 212172,
+ "status_2xx": 991153,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 425788,
- "tpl_json": 69068,
- "tpl_db": 69311,
- "tpl_upload": 85169,
- "tpl_compression": 135301
+ "tpl_baseline": 382770,
+ "tpl_json": 61702,
+ "tpl_db": 61751,
+ "tpl_upload": 76197,
+ "tpl_compression": 120919,
+ "tpl_static": 135995,
+ "tpl_async_db": 151819
},
{
"framework": "chi",
"language": "Go",
- "rps": 14658,
- "avg_latency": "205.06ms",
- "p99_latency": "3.49s",
- "cpu": "8147.0%",
- "memory": "724.9MiB",
+ "rps": 34365,
+ "avg_latency": "111.50ms",
+ "p99_latency": "898.60ms",
+ "cpu": "7540.8%",
+ "memory": "595.3MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "498.40MB/s",
- "input_bw": "1.43GB/s",
- "reconnects": 45858,
- "status_2xx": 219874,
+ "bandwidth": "965.83MB/s",
+ "input_bw": "2.40GB/s",
+ "reconnects": 109435,
+ "status_2xx": 515488,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 127457,
- "tpl_json": 24342,
- "tpl_db": 19323,
- "tpl_upload": 17284,
- "tpl_compression": 31468
+ "tpl_baseline": 209963,
+ "tpl_json": 33577,
+ "tpl_db": 32131,
+ "tpl_upload": 37906,
+ "tpl_compression": 57706,
+ "tpl_static": 65695,
+ "tpl_async_db": 78510
},
{
"framework": "deno",
"language": "TS",
- "rps": 34442,
- "avg_latency": "105.23ms",
- "p99_latency": "447.80ms",
- "cpu": "9418.1%",
- "memory": "14.4GiB",
+ "rps": 51334,
+ "avg_latency": "71.17ms",
+ "p99_latency": "329.10ms",
+ "cpu": "7938.2%",
+ "memory": "10.6GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.69GB/s",
- "input_bw": "3.37GB/s",
- "reconnects": 110627,
- "status_2xx": 516641,
+ "bandwidth": "1.88GB/s",
+ "input_bw": "3.58GB/s",
+ "reconnects": 164138,
+ "status_2xx": 770013,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 280439,
- "tpl_json": 45446,
- "tpl_db": 45632,
- "tpl_upload": 55917,
- "tpl_compression": 89207
+ "tpl_baseline": 297221,
+ "tpl_json": 48074,
+ "tpl_db": 48116,
+ "tpl_upload": 59094,
+ "tpl_compression": 94028,
+ "tpl_static": 105639,
+ "tpl_async_db": 117841
},
{
"framework": "Django",
"language": "Python",
- "rps": 30105,
- "avg_latency": "80.06ms",
- "p99_latency": "218.00ms",
- "cpu": "11506.8%",
- "memory": "8.5GiB",
+ "rps": 38703,
+ "avg_latency": "63.15ms",
+ "p99_latency": "133.10ms",
+ "cpu": "11032.3%",
+ "memory": "10.1GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.45GB/s",
- "input_bw": "2.94GB/s",
- "reconnects": 451742,
- "status_2xx": 451587,
+ "bandwidth": "1.42GB/s",
+ "input_bw": "2.70GB/s",
+ "reconnects": 580710,
+ "status_2xx": 580545,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 225873,
- "tpl_json": 45190,
- "tpl_db": 45211,
- "tpl_upload": 45182,
- "tpl_compression": 90131
+ "tpl_baseline": 207549,
+ "tpl_json": 41495,
+ "tpl_db": 41490,
+ "tpl_upload": 41520,
+ "tpl_compression": 82782,
+ "tpl_static": 82794,
+ "tpl_async_db": 82915
},
{
"framework": "drogon",
"language": "C++",
- "rps": 18898,
- "avg_latency": "198.86ms",
- "p99_latency": "3.27s",
- "cpu": "11888.8%",
- "memory": "816.8MiB",
+ "rps": 26500,
+ "avg_latency": "144.32ms",
+ "p99_latency": "2.30s",
+ "cpu": "11412.5%",
+ "memory": "758.9MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "589.22MB/s",
+ "bandwidth": "622.44MB/s",
"input_bw": "1.85GB/s",
- "reconnects": 60918,
- "status_2xx": 283477,
+ "reconnects": 84754,
+ "status_2xx": 397506,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 155338,
- "tpl_json": 26966,
- "tpl_db": 27609,
- "tpl_upload": 28831,
- "tpl_compression": 44733
+ "tpl_baseline": 159773,
+ "tpl_json": 27087,
+ "tpl_db": 27565,
+ "tpl_upload": 29530,
+ "tpl_compression": 43764,
+ "tpl_static": 50691,
+ "tpl_async_db": 59096
},
{
"framework": "echo",
"language": "Go",
- "rps": 14639,
- "avg_latency": "210.15ms",
- "p99_latency": "3.48s",
- "cpu": "8214.1%",
- "memory": "1010.0MiB",
+ "rps": 36125,
+ "avg_latency": "103.27ms",
+ "p99_latency": "930.30ms",
+ "cpu": "7928.2%",
+ "memory": "1.7GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "490.65MB/s",
- "input_bw": "1.43GB/s",
- "reconnects": 45871,
- "status_2xx": 219588,
+ "bandwidth": "984.45MB/s",
+ "input_bw": "2.52GB/s",
+ "reconnects": 115334,
+ "status_2xx": 541885,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 127283,
- "tpl_json": 24826,
- "tpl_db": 19410,
- "tpl_upload": 17143,
- "tpl_compression": 30926
+ "tpl_baseline": 225787,
+ "tpl_json": 38594,
+ "tpl_db": 30502,
+ "tpl_upload": 35039,
+ "tpl_compression": 58622,
+ "tpl_static": 70154,
+ "tpl_async_db": 83187
},
{
"framework": "Elysia",
"language": "TS",
- "rps": 51251,
- "avg_latency": "74.10ms",
- "p99_latency": "338.30ms",
- "cpu": "10559.5%",
- "memory": "9.4GiB",
+ "rps": 64011,
+ "avg_latency": "59.39ms",
+ "p99_latency": "312.00ms",
+ "cpu": "9935.9%",
+ "memory": "9.3GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.89GB/s",
- "input_bw": "5.01GB/s",
- "reconnects": 165794,
- "status_2xx": 768769,
+ "bandwidth": "1.79GB/s",
+ "input_bw": "4.47GB/s",
+ "reconnects": 205498,
+ "status_2xx": 960170,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 417422,
- "tpl_json": 67799,
- "tpl_db": 67902,
- "tpl_upload": 83337,
- "tpl_compression": 132309
+ "tpl_baseline": 370950,
+ "tpl_json": 60010,
+ "tpl_db": 59990,
+ "tpl_upload": 73826,
+ "tpl_compression": 117154,
+ "tpl_static": 131587,
+ "tpl_async_db": 146653
},
{
"framework": "Express",
"language": "JS",
- "rps": 37033,
- "avg_latency": "29.88ms",
- "p99_latency": "241.30ms",
- "cpu": "11090.1%",
- "memory": "9.8GiB",
+ "rps": 46995,
+ "avg_latency": "22.81ms",
+ "p99_latency": "242.50ms",
+ "cpu": "10552.3%",
+ "memory": "10.0GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.39GB/s",
- "input_bw": "3.62GB/s",
- "reconnects": 120868,
- "status_2xx": 555497,
+ "bandwidth": "1.33GB/s",
+ "input_bw": "3.28GB/s",
+ "reconnects": 151915,
+ "status_2xx": 704931,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 301675,
- "tpl_json": 48557,
- "tpl_db": 48512,
- "tpl_upload": 60222,
- "tpl_compression": 96531
+ "tpl_baseline": 271600,
+ "tpl_json": 43685,
+ "tpl_db": 43653,
+ "tpl_upload": 54240,
+ "tpl_compression": 86463,
+ "tpl_static": 96976,
+ "tpl_async_db": 108314
},
{
"framework": "FastAPI",
"language": "Python",
- "rps": 36417,
- "avg_latency": "102.70ms",
- "p99_latency": "527.10ms",
- "cpu": "11755.1%",
- "memory": "11.4GiB",
+ "rps": 50853,
+ "avg_latency": "73.71ms",
+ "p99_latency": "402.20ms",
+ "cpu": "11393.3%",
+ "memory": "11.6GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.43GB/s",
- "input_bw": "3.56GB/s",
- "reconnects": 117773,
- "status_2xx": 546268,
+ "bandwidth": "1.51GB/s",
+ "input_bw": "3.55GB/s",
+ "reconnects": 163350,
+ "status_2xx": 762795,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 296234,
- "tpl_json": 48354,
- "tpl_db": 48636,
- "tpl_upload": 59493,
- "tpl_compression": 93551
+ "tpl_baseline": 295384,
+ "tpl_json": 47777,
+ "tpl_db": 47858,
+ "tpl_upload": 58826,
+ "tpl_compression": 92713,
+ "tpl_static": 103841,
+ "tpl_async_db": 116396
},
{
"framework": "Fastify",
"language": "JS",
- "rps": 39844,
- "avg_latency": "25.69ms",
- "p99_latency": "161.00ms",
- "cpu": "11013.6%",
- "memory": "10.2GiB",
+ "rps": 55955,
+ "avg_latency": "23.74ms",
+ "p99_latency": "212.20ms",
+ "cpu": "10249.5%",
+ "memory": "10.1GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.50GB/s",
- "input_bw": "3.89GB/s",
- "reconnects": 130056,
- "status_2xx": 597660,
+ "bandwidth": "1.58GB/s",
+ "input_bw": "3.91GB/s",
+ "reconnects": 180713,
+ "status_2xx": 839330,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 324668,
- "tpl_json": 51988,
- "tpl_db": 51941,
- "tpl_upload": 64670,
- "tpl_compression": 104393
+ "tpl_baseline": 324028,
+ "tpl_json": 51990,
+ "tpl_db": 51953,
+ "tpl_upload": 64187,
+ "tpl_compression": 103065,
+ "tpl_static": 115471,
+ "tpl_async_db": 128636
},
{
- "framework": "fiber",
- "language": "Go",
- "rps": 31814,
- "avg_latency": "116.35ms",
- "p99_latency": "1.02s",
- "cpu": "9257.4%",
- "memory": "4.1GiB",
- "connections": 4096,
- "threads": 64,
- "duration": "5s",
- "pipeline": 1,
- "bandwidth": "1.23GB/s",
- "input_bw": "3.11GB/s",
- "reconnects": 103342,
- "status_2xx": 477210,
- "status_3xx": 0,
- "status_4xx": 0,
- "status_5xx": 0,
- "tpl_baseline": 254459,
- "tpl_json": 43058,
- "tpl_db": 43757,
- "tpl_upload": 55426,
- "tpl_compression": 80510
- },
- {
- "framework": "flask",
+ "framework": "FastPySGI-ASGI",
"language": "Python",
- "rps": 30596,
- "avg_latency": "78.78ms",
- "p99_latency": "134.70ms",
- "cpu": "11698.7%",
- "memory": "7.1GiB",
+ "rps": 43259,
+ "avg_latency": "87.98ms",
+ "p99_latency": "609.00ms",
+ "cpu": "11465.0%",
+ "memory": "2.5GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.50GB/s",
- "input_bw": "2.99GB/s",
- "reconnects": 459343,
- "status_2xx": 458950,
+ "bandwidth": "1.72GB/s",
+ "input_bw": "4.23GB/s",
+ "reconnects": 140199,
+ "status_2xx": 649322,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 229517,
- "tpl_json": 45987,
- "tpl_db": 46014,
- "tpl_upload": 45710,
- "tpl_compression": 91652
+ "tpl_baseline": 352883,
+ "tpl_json": 56632,
+ "tpl_db": 56736,
+ "tpl_upload": 70589,
+ "tpl_compression": 112482
},
{
- "framework": "GenHTTP",
- "language": "C#",
- "rps": 7874,
- "avg_latency": "358.02ms",
- "p99_latency": "4.55s",
- "cpu": "10378.4%",
- "memory": "2.0GiB",
+ "framework": "FastPySGI-WSGI",
+ "language": "Python",
+ "rps": 44164,
+ "avg_latency": "88.08ms",
+ "p99_latency": "783.70ms",
+ "cpu": "11635.7%",
+ "memory": "1.2GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "404.09MB/s",
- "input_bw": "787.90MB/s",
- "reconnects": 24565,
- "status_2xx": 118120,
+ "bandwidth": "1.76GB/s",
+ "input_bw": "4.32GB/s",
+ "reconnects": 143678,
+ "status_2xx": 662468,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 63215,
- "tpl_json": 10820,
- "tpl_db": 10731,
- "tpl_upload": 13010,
- "tpl_compression": 20344
+ "tpl_baseline": 359738,
+ "tpl_json": 57883,
+ "tpl_db": 57735,
+ "tpl_upload": 72163,
+ "tpl_compression": 114949
},
{
- "framework": "gin",
+ "framework": "fiber",
"language": "Go",
- "rps": 14553,
- "avg_latency": "212.86ms",
- "p99_latency": "3.38s",
- "cpu": "8121.6%",
- "memory": "1.4GiB",
+ "rps": 58490,
+ "avg_latency": "60.18ms",
+ "p99_latency": "462.20ms",
+ "cpu": "8394.1%",
+ "memory": "761.4MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "493.49MB/s",
- "input_bw": "1.42GB/s",
- "reconnects": 45420,
- "status_2xx": 218300,
+ "bandwidth": "1.61GB/s",
+ "input_bw": "4.08GB/s",
+ "reconnects": 187017,
+ "status_2xx": 877352,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 125128,
- "tpl_json": 24313,
- "tpl_db": 19810,
- "tpl_upload": 17915,
- "tpl_compression": 31133
+ "tpl_baseline": 341385,
+ "tpl_json": 58071,
+ "tpl_db": 58889,
+ "tpl_upload": 74904,
+ "tpl_compression": 109156,
+ "tpl_static": 108520,
+ "tpl_async_db": 126427
},
{
- "framework": "go-fasthttp",
- "language": "Go",
- "rps": 49427,
- "avg_latency": "71.02ms",
- "p99_latency": "718.70ms",
- "cpu": "10302.9%",
- "memory": "80.7GiB",
+ "framework": "flask",
+ "language": "Python",
+ "rps": 39309,
+ "avg_latency": "62.41ms",
+ "p99_latency": "151.90ms",
+ "cpu": "11036.4%",
+ "memory": "8.8GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.78GB/s",
- "input_bw": "4.83GB/s",
- "reconnects": 160024,
- "status_2xx": 741911,
+ "bandwidth": "1.46GB/s",
+ "input_bw": "2.74GB/s",
+ "reconnects": 589920,
+ "status_2xx": 589645,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 398728,
- "tpl_json": 65805,
- "tpl_db": 66562,
- "tpl_upload": 82319,
- "tpl_compression": 128496
+ "tpl_baseline": 210761,
+ "tpl_json": 42192,
+ "tpl_db": 42211,
+ "tpl_upload": 42044,
+ "tpl_compression": 84068,
+ "tpl_static": 84174,
+ "tpl_async_db": 84195
},
{
- "framework": "Hono (Bun)",
- "language": "TS",
- "rps": 49378,
- "avg_latency": "76.88ms",
- "p99_latency": "355.70ms",
- "cpu": "10569.0%",
- "memory": "7.1GiB",
+ "framework": "GenHTTP",
+ "language": "C#",
+ "rps": 10885,
+ "avg_latency": "322.82ms",
+ "p99_latency": "4.35s",
+ "cpu": "9557.2%",
+ "memory": "2.1GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.83GB/s",
- "input_bw": "4.83GB/s",
- "reconnects": 159668,
- "status_2xx": 740676,
+ "bandwidth": "414.63MB/s",
+ "input_bw": "778.16MB/s",
+ "reconnects": 33512,
+ "status_2xx": 163286,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 402103,
- "tpl_json": 65179,
- "tpl_db": 65451,
- "tpl_upload": 80348,
- "tpl_compression": 127595
+ "tpl_baseline": 64093,
+ "tpl_json": 10712,
+ "tpl_db": 10678,
+ "tpl_upload": 13143,
+ "tpl_compression": 19937,
+ "tpl_static": 21019,
+ "tpl_async_db": 23704
},
{
- "framework": "hono (node)",
- "language": "JS",
- "rps": 34650,
- "avg_latency": "29.42ms",
- "p99_latency": "264.30ms",
- "cpu": "11133.0%",
- "memory": "10.8GiB",
+ "framework": "gin",
+ "language": "Go",
+ "rps": 32477,
+ "avg_latency": "115.41ms",
+ "p99_latency": "969.60ms",
+ "cpu": "7851.2%",
+ "memory": "988.2MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.30GB/s",
- "input_bw": "3.39GB/s",
- "reconnects": 113016,
- "status_2xx": 519752,
+ "bandwidth": "956.24MB/s",
+ "input_bw": "2.27GB/s",
+ "reconnects": 104357,
+ "status_2xx": 487162,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 282244,
- "tpl_json": 45258,
- "tpl_db": 45357,
- "tpl_upload": 56326,
- "tpl_compression": 90566
+ "tpl_baseline": 193482,
+ "tpl_json": 32482,
+ "tpl_db": 31285,
+ "tpl_upload": 37773,
+ "tpl_compression": 57406,
+ "tpl_static": 63469,
+ "tpl_async_db": 71265
},
{
- "framework": "kemal",
- "language": "Crystal",
- "rps": 40317,
- "avg_latency": "86.83ms",
- "p99_latency": "320.30ms",
- "cpu": "11265.4%",
- "memory": "26.3GiB",
+ "framework": "Hono (Bun)",
+ "language": "TS",
+ "rps": 62364,
+ "avg_latency": "61.03ms",
+ "p99_latency": "316.20ms",
+ "cpu": "9918.8%",
+ "memory": "7.0GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.62GB/s",
- "input_bw": "3.94GB/s",
- "reconnects": 129869,
- "status_2xx": 604768,
+ "bandwidth": "1.74GB/s",
+ "input_bw": "4.35GB/s",
+ "reconnects": 200103,
+ "status_2xx": 935473,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 325213,
- "tpl_json": 53462,
- "tpl_db": 53774,
- "tpl_upload": 67434,
- "tpl_compression": 104885
+ "tpl_baseline": 362169,
+ "tpl_json": 58286,
+ "tpl_db": 58389,
+ "tpl_upload": 71800,
+ "tpl_compression": 113816,
+ "tpl_static": 127885,
+ "tpl_async_db": 143128
},
{
- "framework": "Koa",
+ "framework": "hono (node)",
"language": "JS",
- "rps": 45268,
- "avg_latency": "30.05ms",
- "p99_latency": "263.70ms",
- "cpu": "10916.5%",
- "memory": "9.7GiB",
+ "rps": 48932,
+ "avg_latency": "23.21ms",
+ "p99_latency": "239.00ms",
+ "cpu": "10395.6%",
+ "memory": "10.1GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.70GB/s",
- "input_bw": "4.42GB/s",
- "reconnects": 147714,
- "status_2xx": 679022,
- "status_3xx": 0,
- "status_4xx": 0,
- "status_5xx": 0,
- "tpl_baseline": 369444,
- "tpl_json": 59177,
- "tpl_db": 59157,
- "tpl_upload": 73101,
- "tpl_compression": 118143
- },
- {
- "framework": "nginx-openresty",
- "language": "Lua",
- "rps": 20578,
- "avg_latency": "180.08ms",
- "p99_latency": "731.90ms",
- "cpu": "11902.7%",
- "memory": "4.9GiB",
- "connections": 4096,
- "threads": 64,
- "duration": "5s",
- "pipeline": 1,
- "bandwidth": "823.00MB/s",
- "input_bw": "2.01GB/s",
- "reconnects": 65693,
- "status_2xx": 308888,
+ "bandwidth": "1.39GB/s",
+ "input_bw": "3.42GB/s",
+ "reconnects": 158265,
+ "status_2xx": 733980,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 166539,
- "tpl_json": 28023,
- "tpl_db": 28288,
- "tpl_upload": 33684,
- "tpl_compression": 52354
+ "tpl_baseline": 282486,
+ "tpl_json": 45315,
+ "tpl_db": 45390,
+ "tpl_upload": 56340,
+ "tpl_compression": 90590,
+ "tpl_static": 101232,
+ "tpl_async_db": 112627
},
{
- "framework": "node",
- "language": "JS",
- "rps": 47714,
- "avg_latency": "36.60ms",
- "p99_latency": "146.80ms",
- "cpu": "10816.5%",
- "memory": "8.6GiB",
+ "framework": "hummingbird",
+ "language": "Swift",
+ "rps": 20104,
+ "avg_latency": "30.99ms",
+ "p99_latency": "261.40ms",
+ "cpu": "10462.5%",
+ "memory": "915.3MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.79GB/s",
- "input_bw": "4.66GB/s",
- "reconnects": 155683,
- "status_2xx": 715722,
+ "bandwidth": "687.01MB/s",
+ "input_bw": "1.40GB/s",
+ "reconnects": 72741,
+ "status_2xx": 301566,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 389373,
- "tpl_json": 62388,
- "tpl_db": 62297,
- "tpl_upload": 77181,
- "tpl_compression": 124482
+ "tpl_baseline": 110734,
+ "tpl_json": 20956,
+ "tpl_db": 20790,
+ "tpl_upload": 21480,
+ "tpl_compression": 41551,
+ "tpl_static": 42300,
+ "tpl_async_db": 43755
},
{
- "framework": "phoenix",
- "language": "Elixir",
- "rps": 9147,
- "avg_latency": "365.32ms",
- "p99_latency": "3.47s",
- "cpu": "3694.7%",
- "memory": "2.7GiB",
+ "framework": "kemal",
+ "language": "Crystal",
+ "rps": 60804,
+ "avg_latency": "56.71ms",
+ "p99_latency": "232.70ms",
+ "cpu": "10774.0%",
+ "memory": "27.7GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "243.65MB/s",
- "input_bw": "915.28MB/s",
- "reconnects": 26740,
- "status_2xx": 137209,
+ "bandwidth": "1.83GB/s",
+ "input_bw": "4.24GB/s",
+ "reconnects": 194918,
+ "status_2xx": 912066,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 82044,
- "tpl_json": 18023,
- "tpl_db": 16125,
- "tpl_upload": 6120,
- "tpl_compression": 14897
+ "tpl_baseline": 352511,
+ "tpl_json": 57441,
+ "tpl_db": 57698,
+ "tpl_upload": 72414,
+ "tpl_compression": 112013,
+ "tpl_static": 122383,
+ "tpl_async_db": 137606
},
{
- "framework": "rocket",
- "language": "Rust",
- "rps": 40604,
- "avg_latency": "97.11ms",
- "p99_latency": "541.70ms",
- "cpu": "6386.6%",
- "memory": "335.8MiB",
+ "framework": "Koa",
+ "language": "JS",
+ "rps": 60373,
+ "avg_latency": "17.06ms",
+ "p99_latency": "106.40ms",
+ "cpu": "10368.8%",
+ "memory": "9.5GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
"bandwidth": "1.71GB/s",
- "input_bw": "3.97GB/s",
- "reconnects": 132417,
- "status_2xx": 609068,
+ "input_bw": "4.21GB/s",
+ "reconnects": 195139,
+ "status_2xx": 905601,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 330945,
- "tpl_json": 53145,
- "tpl_db": 53076,
- "tpl_upload": 66261,
- "tpl_compression": 105638
+ "tpl_baseline": 348863,
+ "tpl_json": 55780,
+ "tpl_db": 55793,
+ "tpl_upload": 69306,
+ "tpl_compression": 111575,
+ "tpl_static": 125084,
+ "tpl_async_db": 139200
},
{
- "framework": "salvo",
- "language": "Rust",
- "rps": 45234,
- "avg_latency": "86.05ms",
- "p99_latency": "415.90ms",
- "cpu": "9665.4%",
- "memory": "1.5GiB",
+ "framework": "ktor",
+ "language": "Kotlin",
+ "rps": 22716,
+ "avg_latency": "164.04ms",
+ "p99_latency": "652.80ms",
+ "cpu": "10726.5%",
+ "memory": "7.4GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.90GB/s",
- "input_bw": "4.42GB/s",
- "reconnects": 147271,
- "status_2xx": 678521,
+ "bandwidth": "548.45MB/s",
+ "input_bw": "1.59GB/s",
+ "reconnects": 71692,
+ "status_2xx": 340746,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 366993,
- "tpl_json": 59606,
- "tpl_db": 59422,
- "tpl_upload": 74630,
- "tpl_compression": 117870
+ "tpl_baseline": 132296,
+ "tpl_json": 21393,
+ "tpl_db": 21373,
+ "tpl_upload": 26320,
+ "tpl_compression": 41522,
+ "tpl_static": 46138,
+ "tpl_async_db": 51704
},
{
- "framework": "Starlette",
- "language": "Python",
- "rps": 37632,
- "avg_latency": "99.87ms",
- "p99_latency": "505.00ms",
- "cpu": "11769.1%",
- "memory": "8.8GiB",
+ "framework": "nginx-openresty",
+ "language": "Lua",
+ "rps": 28221,
+ "avg_latency": "132.57ms",
+ "p99_latency": "540.40ms",
+ "cpu": "12274.3%",
+ "memory": "4.6GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.48GB/s",
- "input_bw": "3.68GB/s",
- "reconnects": 121718,
- "status_2xx": 564490,
+ "bandwidth": "850.41MB/s",
+ "input_bw": "1.97GB/s",
+ "reconnects": 89710,
+ "status_2xx": 423607,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 306532,
- "tpl_json": 49966,
- "tpl_db": 50195,
- "tpl_upload": 61274,
- "tpl_compression": 96523
+ "tpl_baseline": 164995,
+ "tpl_json": 27246,
+ "tpl_db": 27363,
+ "tpl_upload": 32776,
+ "tpl_compression": 51009,
+ "tpl_static": 56681,
+ "tpl_async_db": 63537
},
{
- "framework": "ulfius",
- "language": "C",
- "rps": 6645,
- "avg_latency": "56.28ms",
- "p99_latency": "508.20ms",
- "cpu": "1663.9%",
- "memory": "571.9MiB",
+ "framework": "node",
+ "language": "JS",
+ "rps": 63104,
+ "avg_latency": "19.20ms",
+ "p99_latency": "110.20ms",
+ "cpu": "10074.2%",
+ "memory": "8.7GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "299.25MB/s",
- "input_bw": "664.92MB/s",
- "reconnects": 532268,
- "status_2xx": 99689,
+ "bandwidth": "1.79GB/s",
+ "input_bw": "4.41GB/s",
+ "reconnects": 203861,
+ "status_2xx": 946562,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 54546,
- "tpl_json": 8550,
- "tpl_db": 8664,
- "tpl_upload": 10665,
- "tpl_compression": 17264
+ "tpl_baseline": 365003,
+ "tpl_json": 58696,
+ "tpl_db": 58583,
+ "tpl_upload": 72612,
+ "tpl_compression": 116554,
+ "tpl_static": 130253,
+ "tpl_async_db": 144861
},
{
- "framework": "ultimate-express",
- "language": "JS",
- "rps": 51537,
- "avg_latency": "72.67ms",
- "p99_latency": "368.50ms",
- "cpu": "11386.9%",
- "memory": "10.0GiB",
+ "framework": "ntex-tokio",
+ "language": "Rust",
+ "rps": 76504,
+ "avg_latency": "48.76ms",
+ "p99_latency": "293.40ms",
+ "cpu": "10266.0%",
+ "memory": "1.4GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.93GB/s",
- "input_bw": "5.04GB/s",
- "reconnects": 166914,
- "status_2xx": 773058,
+ "bandwidth": "2.41GB/s",
+ "input_bw": "5.34GB/s",
+ "reconnects": 245645,
+ "status_2xx": 1147561,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 419191,
- "tpl_json": 67723,
- "tpl_db": 67959,
- "tpl_upload": 84055,
- "tpl_compression": 134130
+ "tpl_baseline": 442969,
+ "tpl_json": 71092,
+ "tpl_db": 71227,
+ "tpl_upload": 88190,
+ "tpl_compression": 140506,
+ "tpl_static": 157665,
+ "tpl_async_db": 175912
},
{
- "framework": "FastPySGI-ASGI",
- "language": "Python",
- "rps": 43259,
- "avg_latency": "87.98ms",
- "p99_latency": "609.00ms",
- "cpu": "11465.0%",
- "memory": "2.5GiB",
+ "framework": "phoenix",
+ "language": "Elixir",
+ "rps": 15237,
+ "avg_latency": "205.35ms",
+ "p99_latency": "2.94s",
+ "cpu": "4874.0%",
+ "memory": "2.2GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.72GB/s",
- "input_bw": "4.23GB/s",
- "reconnects": 140199,
- "status_2xx": 649322,
+ "bandwidth": "301.95MB/s",
+ "input_bw": "1.06GB/s",
+ "reconnects": 46285,
+ "status_2xx": 228561,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 352883,
- "tpl_json": 56632,
- "tpl_db": 56736,
- "tpl_upload": 70589,
- "tpl_compression": 112482
+ "tpl_baseline": 108196,
+ "tpl_json": 20799,
+ "tpl_db": 16580,
+ "tpl_upload": 8500,
+ "tpl_compression": 17116,
+ "tpl_static": 24340,
+ "tpl_async_db": 33030
},
{
- "framework": "FastPySGI-WSGI",
- "language": "Python",
- "rps": 44164,
- "avg_latency": "88.08ms",
- "p99_latency": "783.70ms",
- "cpu": "11635.7%",
- "memory": "1.2GiB",
+ "framework": "quarkus-jvm",
+ "language": "Java",
+ "rps": 46316,
+ "avg_latency": "81.80ms",
+ "p99_latency": "749.00ms",
+ "cpu": "9496.5%",
+ "memory": "12.6GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.76GB/s",
- "input_bw": "4.32GB/s",
- "reconnects": 143678,
- "status_2xx": 662468,
+ "bandwidth": "1.34GB/s",
+ "input_bw": "3.23GB/s",
+ "reconnects": 148450,
+ "status_2xx": 695204,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 359738,
- "tpl_json": 57883,
- "tpl_db": 57735,
- "tpl_upload": 72163,
- "tpl_compression": 114949
+ "tpl_baseline": 271161,
+ "tpl_json": 44452,
+ "tpl_db": 44591,
+ "tpl_upload": 52646,
+ "tpl_compression": 82087,
+ "tpl_static": 94125,
+ "tpl_async_db": 106142
},
{
- "framework": "hummingbird",
- "language": "Swift",
- "rps": 14577,
- "avg_latency": "39.36ms",
- "p99_latency": "279.00ms",
- "cpu": "10764.1%",
- "memory": "928.5MiB",
+ "framework": "Rails",
+ "language": "Ruby",
+ "rps": 30414,
+ "avg_latency": "121.03ms",
+ "p99_latency": "516.60ms",
+ "cpu": "9426.3%",
+ "memory": "25.3GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "651.02MB/s",
- "input_bw": "1.42GB/s",
- "reconnects": 52832,
- "status_2xx": 218666,
+ "bandwidth": "933.18MB/s",
+ "input_bw": "2.12GB/s",
+ "reconnects": 96568,
+ "status_2xx": 456223,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 112238,
- "tpl_json": 21198,
- "tpl_db": 21097,
- "tpl_upload": 21832,
- "tpl_compression": 42301
+ "tpl_baseline": 175785,
+ "tpl_json": 28579,
+ "tpl_db": 28760,
+ "tpl_upload": 35311,
+ "tpl_compression": 55917,
+ "tpl_static": 62409,
+ "tpl_async_db": 69462
},
{
- "framework": "ktor",
- "language": "Kotlin",
- "rps": 16496,
- "avg_latency": "223.28ms",
- "p99_latency": "894.70ms",
- "cpu": "10831.5%",
- "memory": "8.5GiB",
+ "framework": "rocket",
+ "language": "Rust",
+ "rps": 30160,
+ "avg_latency": "18.27ms",
+ "p99_latency": "272.00ms",
+ "cpu": "3579.1%",
+ "memory": "273.6MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "519.48MB/s",
- "input_bw": "1.61GB/s",
- "reconnects": 52044,
- "status_2xx": 247442,
+ "bandwidth": "990.13MB/s",
+ "input_bw": "2.11GB/s",
+ "reconnects": 97852,
+ "status_2xx": 452413,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 134001,
- "tpl_json": 22032,
- "tpl_db": 21986,
- "tpl_upload": 26934,
- "tpl_compression": 42489
+ "tpl_baseline": 174231,
+ "tpl_json": 28067,
+ "tpl_db": 27898,
+ "tpl_upload": 33157,
+ "tpl_compression": 56213,
+ "tpl_static": 62988,
+ "tpl_async_db": 69859
},
{
- "framework": "ntex-tokio",
+ "framework": "salvo",
"language": "Rust",
- "rps": 29545,
- "avg_latency": "120.90ms",
- "p99_latency": "569.50ms",
- "cpu": "8736.1%",
- "memory": "2.1GiB",
+ "rps": 64367,
+ "avg_latency": "8.64ms",
+ "p99_latency": "26.70ms",
+ "cpu": "8923.5%",
+ "memory": "910.8MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "5.32GB/s",
- "input_bw": "2.89GB/s",
- "reconnects": 95270,
- "status_2xx": 443772,
+ "bandwidth": "2.03GB/s",
+ "input_bw": "4.49GB/s",
+ "reconnects": 208067,
+ "status_2xx": 965514,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 240586,
- "tpl_json": 39028,
- "tpl_db": 39335,
- "tpl_upload": 48252,
- "tpl_compression": 76571
+ "tpl_baseline": 372337,
+ "tpl_json": 59941,
+ "tpl_db": 59910,
+ "tpl_upload": 73302,
+ "tpl_compression": 118692,
+ "tpl_static": 133068,
+ "tpl_async_db": 148264
},
{
- "framework": "quarkus-jvm",
- "language": "Java",
- "rps": 34438,
- "avg_latency": "107.20ms",
- "p99_latency": "1.01s",
- "cpu": "9616.1%",
- "memory": "12.2GiB",
+ "framework": "Sinatra",
+ "language": "Ruby",
+ "rps": 33747,
+ "avg_latency": "110.14ms",
+ "p99_latency": "838.80ms",
+ "cpu": "9209.2%",
+ "memory": "24.9GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.28GB/s",
- "input_bw": "3.37GB/s",
- "reconnects": 110724,
- "status_2xx": 516915,
+ "bandwidth": "1018.19MB/s",
+ "input_bw": "2.36GB/s",
+ "reconnects": 107267,
+ "status_2xx": 506206,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 283245,
- "tpl_json": 48834,
- "tpl_db": 48104,
- "tpl_upload": 53678,
- "tpl_compression": 83054
+ "tpl_baseline": 196557,
+ "tpl_json": 31880,
+ "tpl_db": 31991,
+ "tpl_upload": 39034,
+ "tpl_compression": 61182,
+ "tpl_static": 68690,
+ "tpl_async_db": 76872
},
{
- "framework": "Rails",
- "language": "Ruby",
- "rps": 23492,
- "avg_latency": "157.69ms",
- "p99_latency": "609.50ms",
- "cpu": "10647.2%",
- "memory": "30.9GiB",
+ "framework": "spring-jvm",
+ "language": "Java",
+ "rps": 50162,
+ "avg_latency": "75.90ms",
+ "p99_latency": "133.40ms",
+ "cpu": "9978.5%",
+ "memory": "5.6GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "954.56MB/s",
- "input_bw": "2.30GB/s",
- "reconnects": 74849,
- "status_2xx": 352388,
+ "bandwidth": "1.50GB/s",
+ "input_bw": "3.50GB/s",
+ "reconnects": 160507,
+ "status_2xx": 752431,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 190783,
- "tpl_json": 31068,
- "tpl_db": 31268,
- "tpl_upload": 38410,
- "tpl_compression": 60859
+ "tpl_baseline": 289322,
+ "tpl_json": 46407,
+ "tpl_db": 46446,
+ "tpl_upload": 57909,
+ "tpl_compression": 92525,
+ "tpl_static": 103953,
+ "tpl_async_db": 115869
},
{
- "framework": "Sinatra",
- "language": "Ruby",
- "rps": 26634,
- "avg_latency": "139.59ms",
- "p99_latency": "765.40ms",
- "cpu": "9929.9%",
- "memory": "26.0GiB",
+ "framework": "Starlette",
+ "language": "Python",
+ "rps": 52575,
+ "avg_latency": "71.28ms",
+ "p99_latency": "392.40ms",
+ "cpu": "11183.3%",
+ "memory": "10.2GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.05GB/s",
- "input_bw": "2.60GB/s",
- "reconnects": 85135,
- "status_2xx": 399512,
+ "bandwidth": "1.56GB/s",
+ "input_bw": "3.67GB/s",
+ "reconnects": 168900,
+ "status_2xx": 788626,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 216464,
- "tpl_json": 35387,
- "tpl_db": 35573,
- "tpl_upload": 43430,
- "tpl_compression": 68658
+ "tpl_baseline": 305619,
+ "tpl_json": 49395,
+ "tpl_db": 49480,
+ "tpl_upload": 60751,
+ "tpl_compression": 95673,
+ "tpl_static": 107386,
+ "tpl_async_db": 120322
},
{
- "framework": "spring-jvm",
- "language": "Java",
- "rps": 34628,
- "avg_latency": "109.48ms",
- "p99_latency": "219.10ms",
- "cpu": "9898.3%",
- "memory": "4.4GiB",
+ "framework": "ulfius",
+ "language": "C",
+ "rps": 7556,
+ "avg_latency": "56.55ms",
+ "p99_latency": "442.00ms",
+ "cpu": "1256.0%",
+ "memory": "471.1MiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.38GB/s",
- "input_bw": "3.38GB/s",
- "reconnects": 111385,
- "status_2xx": 519421,
+ "bandwidth": "254.42MB/s",
+ "input_bw": "540.17MB/s",
+ "reconnects": 555589,
+ "status_2xx": 113344,
"status_3xx": 0,
"status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 281553,
- "tpl_json": 45386,
- "tpl_db": 45282,
- "tpl_upload": 56515,
- "tpl_compression": 90685
+ "tpl_baseline": 43725,
+ "tpl_json": 6978,
+ "tpl_db": 7144,
+ "tpl_upload": 8960,
+ "tpl_compression": 13865,
+ "tpl_static": 15142,
+ "tpl_async_db": 17530
},
{
- "framework": "workerman",
- "language": "PHP",
- "rps": 34552,
- "avg_latency": "100.12ms",
- "p99_latency": "793.30ms",
- "cpu": "11295.6%",
- "memory": "2.6GiB",
+ "framework": "ultimate-express",
+ "language": "JS",
+ "rps": 67858,
+ "avg_latency": "55.31ms",
+ "p99_latency": "295.20ms",
+ "cpu": "10910.4%",
+ "memory": "9.9GiB",
"connections": 4096,
"threads": 64,
"duration": "5s",
"pipeline": 1,
- "bandwidth": "1.55GB/s",
- "input_bw": "3.38GB/s",
- "reconnects": 125834,
- "status_2xx": 518288,
+ "bandwidth": "1.92GB/s",
+ "input_bw": "4.74GB/s",
+ "reconnects": 218020,
+ "status_2xx": 1017880,
"status_3xx": 0,
- "status_4xx": 63226,
+ "status_4xx": 0,
"status_5xx": 0,
- "tpl_baseline": 315326,
- "tpl_json": 51507,
- "tpl_db": 51783,
- "tpl_upload": 0,
- "tpl_compression": 99672
+ "tpl_baseline": 392359,
+ "tpl_json": 63234,
+ "tpl_db": 63217,
+ "tpl_upload": 78507,
+ "tpl_compression": 124985,
+ "tpl_static": 139772,
+ "tpl_async_db": 155806
}
]
\ No newline at end of file
diff --git a/site/layouts/shortcodes/leaderboard-composite.html b/site/layouts/shortcodes/leaderboard-composite.html
index 6e725617..f4945174 100644
--- a/site/layouts/shortcodes/leaderboard-composite.html
+++ b/site/layouts/shortcodes/leaderboard-composite.html
@@ -26,7 +26,7 @@
{{ $data := index site.Data $key }}
{{ if $data }}
{{ range $data }}
- {{ $entries = $entries | append (dict "profile" $p.id "label" $p.label "framework" .framework "rps" .rps "language" (.language | default "") "cpu" (.cpu | default "") "memory" (.memory | default "") "bandwidth" (.bandwidth | default "") "tpl_baseline" (.tpl_baseline | default 0) "tpl_json" (.tpl_json | default 0) "tpl_db" (.tpl_db | default 0) "tpl_upload" (.tpl_upload | default 0) "tpl_compression" (.tpl_compression | default 0)) }}
+ {{ $entries = $entries | append (dict "profile" $p.id "label" $p.label "framework" .framework "rps" .rps "language" (.language | default "") "cpu" (.cpu | default "") "memory" (.memory | default "") "bandwidth" (.bandwidth | default "") "tpl_baseline" (.tpl_baseline | default 0) "tpl_json" (.tpl_json | default 0) "tpl_db" (.tpl_db | default 0) "tpl_upload" (.tpl_upload | default 0) "tpl_compression" (.tpl_compression | default 0) "tpl_static" (.tpl_static | default 0) "tpl_async_db" (.tpl_async_db | default 0)) }}
{{ end }}
{{ end }}
{{ end }}
@@ -204,7 +204,7 @@
var data = roundData[key];
if (data) {
data.forEach(function(d) {
- entries.push({ profile: p.id, label: p.label, framework: d.framework, rps: d.rps, language: d.language || '', cpu: d.cpu || '', memory: d.memory || '', bandwidth: d.bandwidth || '', tpl_baseline: d.tpl_baseline || 0, tpl_json: d.tpl_json || 0, tpl_db: d.tpl_db || 0, tpl_upload: d.tpl_upload || 0, tpl_compression: d.tpl_compression || 0 });
+ entries.push({ profile: p.id, label: p.label, framework: d.framework, rps: d.rps, language: d.language || '', cpu: d.cpu || '', memory: d.memory || '', bandwidth: d.bandwidth || '', tpl_baseline: d.tpl_baseline || 0, tpl_json: d.tpl_json || 0, tpl_db: d.tpl_db || 0, tpl_upload: d.tpl_upload || 0, tpl_compression: d.tpl_compression || 0, tpl_static: d.tpl_static || 0, tpl_async_db: d.tpl_async_db || 0 });
});
}
});
@@ -230,12 +230,14 @@
counts[key] = (counts[key] || 0) + 1;
if (e.profile === 'mixed') {
var fw = e.framework;
- if (!tplSums[fw]) tplSums[fw] = {baseline:0, json:0, db:0, upload:0, compression:0, count:0};
+ if (!tplSums[fw]) tplSums[fw] = {baseline:0, json:0, db:0, upload:0, compression:0, static:0, async_db:0, count:0};
tplSums[fw].baseline += (e.tpl_baseline || 0);
tplSums[fw].json += (e.tpl_json || 0);
tplSums[fw].db += (e.tpl_db || 0);
tplSums[fw].upload += (e.tpl_upload || 0);
tplSums[fw].compression += (e.tpl_compression || 0);
+ tplSums[fw].static += (e.tpl_static || 0);
+ tplSums[fw].async_db += (e.tpl_async_db || 0);
tplSums[fw].count++;
}
});
@@ -254,7 +256,9 @@
json: t.json / t.count,
db: t.db / t.count,
upload: t.upload / t.count,
- compression: t.compression / t.count
+ compression: t.compression / t.count,
+ static: t.static / t.count,
+ async_db: t.async_db / t.count
};
});
fwLang = {};
@@ -340,13 +344,13 @@
});
// For mixed: compute weighted scores and re-normalize
- var mixedWeights = {baseline:0.15, json:1, db:10, upload:10, compression:7};
+ var mixedWeights = {baseline:0.15, json:1, db:10, upload:10, compression:7, static:2, async_db:10};
if (activeIds.indexOf('mixed') >= 0) {
var maxWeighted = 0;
Object.keys(avgTplMixed).forEach(function(fw) {
if (isExcluded(fw)) return;
var t = avgTplMixed[fw];
- var w = t.baseline * mixedWeights.baseline + t.json * mixedWeights.json + t.db * mixedWeights.db + t.upload * mixedWeights.upload + t.compression * mixedWeights.compression;
+ var w = t.baseline * mixedWeights.baseline + t.json * mixedWeights.json + t.db * mixedWeights.db + t.upload * mixedWeights.upload + t.compression * mixedWeights.compression + (t.static || 0) * mixedWeights.static + (t.async_db || 0) * mixedWeights.async_db;
if (w > maxWeighted) maxWeighted = w;
});
if (maxWeighted > 0) maxRpsByProfile['mixed'] = maxWeighted;
@@ -399,7 +403,7 @@
// For mixed: use weighted template score
if (pid === 'mixed' && avgTplMixed[fw]) {
var t = avgTplMixed[fw];
- effectiveRps = t.baseline * mixedWeights.baseline + t.json * mixedWeights.json + t.db * mixedWeights.db + t.upload * mixedWeights.upload + t.compression * mixedWeights.compression;
+ effectiveRps = t.baseline * mixedWeights.baseline + t.json * mixedWeights.json + t.db * mixedWeights.db + t.upload * mixedWeights.upload + t.compression * mixedWeights.compression + (t.static || 0) * mixedWeights.static + (t.async_db || 0) * mixedWeights.async_db;
}
// For compression: use bandwidth-adjusted RPS
if (pid === 'compression' && minBwPerReq[pid]) {
diff --git a/site/layouts/shortcodes/leaderboard.html b/site/layouts/shortcodes/leaderboard.html
index 3e4d8427..deb6be21 100644
--- a/site/layouts/shortcodes/leaderboard.html
+++ b/site/layouts/shortcodes/leaderboard.html
@@ -400,7 +400,7 @@
(dict "id" "upload" "label" "Upload (20 MB)" "conns" (slice 64 256 512) "desc" "Each request sends a 20 MB binary payload via POST /upload. The server reads the entire body and returns its CRC32 checksum. Measures request body ingestion throughput — how efficiently a framework handles large uploads, including buffering, memory management, and I/O handling under sustained load.")
(dict "id" "compression" "label" "Compression" "conns" (slice 4096 16384) "desc" "Requests GET /compression with Accept-Encoding: gzip. The server loads a 6000-item dataset (~1 MB JSON) at startup and serves it gzip-compressed on the fly. Measures the throughput cost of real-time compression — only frameworks with built-in gzip support are eligible.")
(dict "id" "noisy" "label" "Noisy" "conns" (slice 512 4096 16384) "desc" "Valid baseline requests interleaved with malformed noise — nonexistent paths, bad content-length, and raw binary. Only 2xx responses count. Measures resilience: how well a framework maintains throughput while rejecting garbage traffic.")
- (dict "id" "mixed" "label" "Mixed Workload" "conns" (slice 4096 16384) "desc" "A realistic mix of request types: 3 baseline GETs, 2 baseline POSTs, 1 JSON processing, 1 SQLite DB lookup, 1 file upload (1 MB), and 2 compression requests. Connections limited to 100 requests each. Measures overall framework performance under a diverse, real-world-like workload that exercises multiple code paths simultaneously.")
+ (dict "id" "mixed" "label" "Mixed Workload" "conns" (slice 4096 16384) "desc" "A realistic mix of request types: 3 baseline GETs, 2 baseline POSTs, 1 JSON processing, 1 SQLite DB lookup, 1 file upload (1 MB), 2 compression requests, 2 static file serves, and 2 async Postgres queries. Connections limited to 5 requests each. Measures overall framework performance under a diverse, real-world-like workload that exercises multiple code paths simultaneously.")
(dict "id" "static" "label" "Static Files" "conns" (slice 4096 16384) "desc" "Serves 20 pre-loaded static files (CSS, JS, HTML, fonts, images, JSON) from /static/{filename} over HTTP/1.1. Files are loaded into memory at startup. Requests cycle through all 20 files. Measures static file serving throughput, MIME type handling, and memory-mapped I/O efficiency.")
(dict "id" "pipelined" "label" "Pipelined (16)" "conns" (slice 512 4096 16384) "desc" "16 HTTP requests are sent back-to-back on each connection before waiting for responses. Uses a lightweight GET /pipeline endpoint that returns a fixed response, isolating raw I/O and pipeline handling from application logic. Frameworks that batch pipelined requests from the read buffer gain a significant advantage.")
(dict "id" "async-db" "label" "Async DB" "conns" (slice 512 1024) "desc" "Async Postgres query over 100K rows with no index on price, forcing a sequential scan per request. The framework manages its own connection pool and uses an async Postgres driver. Measures event loop scheduling, connection pooling efficiency, and async I/O throughput. Framework-only — engines are excluded.")
@@ -555,7 +555,7 @@
{{ $pct := mul (div (float $r.rps) (float $maxRps)) 100.0 }}
{{ $meta := index site.Data.frameworks $r.framework }}
{{ $s2xx := int ($r.status_2xx | default 0) }}{{ $s3xx := int ($r.status_3xx | default 0) }}{{ $s4xx := int ($r.status_4xx | default 0) }}{{ $s5xx := int ($r.status_5xx | default 0) }}{{ $errs := add $s4xx $s5xx }}
-