Skip to content

Commit d174c26

Browse files
committed
docs: update performance claims with reproducible bare-metal numbers
Replace inflated 137k req/sec claims with honest reproducible numbers: static-web ~76k req/sec, Bun ~90k req/sec (Apple M-series, bombardier -c 50 -n 100000). Update landing page meta tags, hero stats, benchmark table, feature cards, structured data, README, and USER_GUIDE.
1 parent 0d4def4 commit d174c26

3 files changed

Lines changed: 30 additions & 30 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ When `preload = true`, every eligible file is loaded into cache at startup. The
137137

138138
### End-to-end HTTP benchmarks
139139

140-
Measured on Apple M2 Pro, localhost (no Docker), serving 3 small static files via `bombardier -c 50 -n 100000`:
140+
Measured on Apple M-series, localhost (no Docker), serving 3 small static files via `bombardier -c 50 -n 100000`:
141141

142142
| Server | Avg Req/sec | p50 Latency | p99 Latency |
143143
|--------|-------------|-------------|-------------|
144-
| **static-web** (preload + GC 400) | **~137,000** | **321 µs** | **1.18 ms** |
145-
| **static-web** (default config) | ~76,000 | 580 µs | 2.40 ms |
146-
| Bun (native static serve) | ~129,000 | 361 µs | 0.84 ms |
144+
| Bun (native static serve) | **~90,000** | **508 µs** | **1.10 ms** |
145+
| **static-web** (preload + GC 400) | ~76,000 | 630 µs | 1.40 ms |
146+
| **static-web** (default config) | ~50,000 | 920 µs | 3.20 ms |
147147

148-
With `preload = true` and `gc_percent = 400`, static-web beats Bun's native static serving by ~6% in throughput.
148+
With `preload = true` and `gc_percent = 400`, static-web delivers ~76k req/sec — within 20% of Bun's native static serving, while offering full security headers, TLS, and compression out of the box.
149149

150150
### Micro-benchmarks
151151

USER_GUIDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ docker kill --signal=HUP <container_id>
602602
603603
## Preloading for Maximum Performance
604604
605-
Enable `preload` to read every eligible file into the in-memory cache at startup. Combined with GC tuning, this yields the highest possible throughput — up to **~137,000 req/sec** on Apple M2 Pro (beating Bun's native static serve).
605+
Enable `preload` to read every eligible file into the in-memory cache at startup. Combined with GC tuning, this yields the highest possible throughput — up to **~76,000 req/sec** on Apple M-series (within 20% of Bun's native static serve, while including full security headers, TLS, and compression).
606606
607607
### Configuration
608608

docs/index.html

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<title>static-web — High-Performance Go Static File Server</title>
77
<meta
88
name="description"
9-
content="Production-grade, blazing-fast static web file server written in Go. 137k req/sec with preload — beats Bun. In-memory LRU cache, HTTP/2, TLS 1.2+, gzip/brotli, security headers — minimal dependency footprint."
9+
content="Production-grade, blazing-fast static web file server written in Go. ~76k req/sec with preload and GC tuning. In-memory LRU cache, HTTP/2, TLS 1.2+, gzip/brotli, security headers — minimal dependency footprint."
1010
/>
1111
<meta
1212
name="keywords"
@@ -20,7 +20,7 @@
2020
<meta property="og:title" content="static-web — High-Performance Go Static File Server" />
2121
<meta
2222
property="og:description"
23-
content="Production-grade static web file server in Go. 137k req/sec with preload — faster than Bun. HTTP/2, TLS 1.2+, gzip/brotli, security hardened."
23+
content="Production-grade static web file server in Go. ~76k req/sec with preload and GC tuning. HTTP/2, TLS 1.2+, gzip/brotli, security hardened."
2424
/>
2525
<meta property="og:type" content="website" />
2626
<meta property="og:url" content="https://static.21no.de" />
@@ -37,7 +37,7 @@
3737
<meta name="twitter:title" content="static-web — High-Performance Go Static File Server" />
3838
<meta
3939
name="twitter:description"
40-
content="Production-grade static file server in Go. 137k req/sec with preload — beats Bun. HTTP/2, TLS, gzip/brotli — security hardened."
40+
content="Production-grade static file server in Go. ~76k req/sec with preload and GC tuning. HTTP/2, TLS, gzip/brotli — security hardened."
4141
/>
4242
<meta name="twitter:image" content="https://static.21no.de/og-image.svg" />
4343
<meta name="twitter:image:alt" content="static-web — High-Performance Go Static File Server" />
@@ -80,7 +80,7 @@
8080
"programmingLanguage": "Go",
8181
"license": "https://github.com/BackendStack21/static-web/blob/main/LICENSE",
8282
"codeRepository": "https://github.com/BackendStack21/static-web",
83-
"description": "A production-grade, blazing-fast static web file server written in Go. 137k req/sec with startup preloading — faster than Bun. Features in-memory LRU cache, TTL-aware cache expiry, HTTP/2, TLS 1.2+, gzip and brotli compression, and comprehensive security headers.",
83+
"description": "A production-grade, blazing-fast static web file server written in Go. ~76k req/sec with startup preloading and GC tuning. Features in-memory LRU cache, TTL-aware cache expiry, HTTP/2, TLS 1.2+, gzip and brotli compression, and comprehensive security headers.",
8484
"author": {
8585
"@type": "Person",
8686
"name": "Rolando Santamaria Maso",
@@ -92,7 +92,7 @@
9292
"priceCurrency": "USD"
9393
},
9494
"featureList": [
95-
"137k req/sec with startup preloading — faster than Bun",
95+
"~76k req/sec with startup preloading and GC tuning",
9696
"In-memory LRU cache with ~28 ns/op lookup",
9797
"Startup preloading with path-safety cache pre-warming",
9898
"TTL-aware cache expiry with optional automatic stale-entry eviction",
@@ -224,12 +224,12 @@ <h1 class="hero-title">static-web</h1>
224224
<p class="hero-subtitle">Production-Grade Go Static File Server</p>
225225
<p class="hero-description">
226226
Blazing fast, lightweight static server with <strong>in-memory LRU cache</strong>, startup preloading, HTTP/2, TLS, gzip / brotli,
227-
and security headers baked in — faster than Bun out of the box.
227+
and security headers baked in.
228228
</p>
229229

230230
<div class="hero-stats">
231231
<div class="stat">
232-
<span class="stat-value">137k</span>
232+
<span class="stat-value">76k</span>
233233
<span class="stat-label">req/sec (preload)</span>
234234
</div>
235235
<div class="stat-divider" aria-hidden="true"></div>
@@ -300,7 +300,7 @@ <h2 class="section-title" id="features-heading">Everything You Need</h2>
300300
<div class="feature-card">
301301
<div class="feature-icon"></div>
302302
<h3>Zero-Alloc Hot Path</h3>
303-
<p><strong>137k req/sec</strong> with preload. Cache hits use direct <code>w.Write()</code> with pre-formatted headers — no <code>http.ServeContent</code>, no syscalls, zero allocations on the hot path.</p>
303+
<p><strong>~76k req/sec</strong> with preload. Cache hits use direct <code>w.Write()</code> with pre-formatted headers — no <code>http.ServeContent</code>, no syscalls, zero allocations on the hot path.</p>
304304
</div>
305305
<div class="feature-card">
306306
<div class="feature-icon">🗜️</div>
@@ -588,7 +588,7 @@ <h3>File Handler</h3>
588588
<section id="performance" class="section-full performance-bg" aria-labelledby="performance-heading">
589589
<div class="section-inner">
590590
<h2 class="section-title" id="performance-heading">Performance Benchmarks</h2>
591-
<p class="section-description">Measured on Apple M2 Pro · localhost (no Docker) · <code>bombardier -c 50 -n 100000</code> · 3 small static files</p>
591+
<p class="section-description">Measured on Apple M-series · localhost (no Docker) · <code>bombardier -c 50 -n 100000</code> · 3 small static files</p>
592592

593593
<div class="benchmark-table-wrap">
594594
<div class="benchmark-table-inner">
@@ -602,23 +602,23 @@ <h2 class="section-title" id="performance-heading">Performance Benchmarks</h2>
602602
</tr>
603603
</thead>
604604
<tbody>
605-
<tr class="highlight">
606-
<td><span class="op-icon"></span> static-web (preload)</td>
607-
<td><strong>~137,000</strong></td>
608-
<td><strong>321 &micro;s</strong></td>
609-
<td><strong>1.18 ms</strong></td>
610-
</tr>
611605
<tr>
612-
<td><span class="op-icon">🥈</span> Bun (native static)</td>
613-
<td>~129,000</td>
614-
<td>361 &micro;s</td>
615-
<td>0.84 ms</td>
606+
<td><span class="op-icon">🥈</span> static-web (preload)</td>
607+
<td><strong>~76,000</strong></td>
608+
<td><strong>630 &micro;s</strong></td>
609+
<td><strong>1.40 ms</strong></td>
610+
</tr>
611+
<tr class="highlight">
612+
<td><span class="op-icon"></span> Bun (native static)</td>
613+
<td>~90,000</td>
614+
<td>508 &micro;s</td>
615+
<td>1.10 ms</td>
616616
</tr>
617617
<tr>
618618
<td><span class="op-icon">📦</span> static-web (default)</td>
619-
<td>~76,000</td>
620-
<td>580 &micro;s</td>
621-
<td>2.40 ms</td>
619+
<td>~50,000</td>
620+
<td>920 &micro;s</td>
621+
<td>3.20 ms</td>
622622
</tr>
623623
</tbody>
624624
</table>
@@ -635,9 +635,9 @@ <h3>Preload &amp; fast-path</h3>
635635
</div>
636636
<div class="perf-card">
637637
<div class="perf-card-icon">🔤</div>
638-
<h3>Beats Bun by ~6%</h3>
638+
<h3>Competitive with Bun</h3>
639639
<p>
640-
With preload + GC tuning, <strong>static-web reaches 137k req/sec</strong>outperforming <strong>Bun at 129k req/sec</strong> on the same workload.
640+
With preload + GC tuning, <strong>static-web reaches ~76k req/sec</strong>within 20% of <strong>Bun at ~90k req/sec</strong>, while offering full security headers, TLS, and compression out of the box.
641641
</p>
642642
</div>
643643
<div class="perf-card">

0 commit comments

Comments
 (0)