SPB Git

spb/spbgit

Public MIT Pinned

SPB Git — the platform hosting itself

4.5 KB

# Benchmarks — SPB Git 1.1.0 → 2.0.0

All numbers measured on 2026-11-01 with Playwright Chromium. "Mobile" = 375×812, CPU ×4 slowdown, 1.6 Mb/s / 150 ms RTT. "Desktop" = 1440×900, no throttling. CLS was 0 on every page in both versions.

# A. Production baseline (1.1.0 on M1M32 behind the tunnel, gzip at the edge)

Page Mobile LCP Mobile TTFB Desktop LCP HTML (gz) CSS (gz) JS (gz) Fonts
/ (157 repos) 1 216 ms 182 ms 320 ms 34.0 KB 18.7 KB 9.0 KB 208.8 KB (5 files)
/spbgit 276 ms 144 ms 236 ms 9.7 KB — — —
blob src/server.mjs 552 ms 424 ms 328 ms 13.2 KB — — —
commit 810e402 (60 files) 1 612 ms 1 463 ms 1 336 ms 120.6 KB — — —

Server, warm: / 64 ms · repo 58 ms · /api/v1/repos 10 ms. PM2: 2 861 memory restarts, RSS peaks 0.9–2.1 GB, 599 MB request log.

# B. Local A/B — same machine, same 9-repo dev dataset, warm caches

1.1.0 ran from a git worktree (810e402) on port 7422, 2.0.0 on 7421. 1.1.0 has no in-process compression (production relies on the edge); 2.0.0 compresses in-process (brotli q4). Column "wire" is what the browser transferred.

Page Version Mobile LCP Mobile DCL Desktop LCP Wire HTML Server avg (10 req)
/ 1.1.0 1 632 ms 1 685 ms 144 ms 98.3 KB (raw) 7 ms
/ 2.0.0 1 572 ms 882 ms 48 ms 12.6 KB (br) 3 ms
/spbgit 1.1.0 568 ms 673 ms 88 ms 43.6 KB 37 ms
/spbgit 2.0.0 180 ms 221 ms 68 ms 12.2 KB 33 ms
blob src/server.mjs 1.1.0 568 ms 876 ms 172 ms 102.9 KB 105 ms
blob src/server.mjs 2.0.0 188 ms 241 ms 168 ms 14.1 KB 116 ms
commit 810e402 1.1.0 1 132 ms 15 267 ms 868 ms 3 004.9 KB 679 ms
commit 810e402 2.0.0 220 ms 697 ms 168 ms 55.1 KB 44 ms
commits list 1.1.0 600 ms 715 ms 136 ms 46.9 KB 73 ms
commits list 2.0.0 220 ms 216 ms 124 ms 10.0 KB 77 ms

Static assets over the wire (brotli): tokens.css 3.2 KB, app.css 12.3 KB, markdown.css 1.8 KB, app.js 10.3 KB, theme-boot.js 0.5 KB. Fonts 186 KB (4 preloaded woff2 files; Instrument Serif dropped).

Cold cache (first home request after wiping the cache): 1.1.0 304 ms, 2.0.0 381 ms for 9 repositories (2.0 also computes research signals and ref stamps). Production will take ~10 s once after deploy for 157 repositories.

# C. Why the commit page changed so much

1.1.0 highlighted every hunk on every request (679 ms server time) and shipped all 60 files (3.0 MB raw). 2.0.0 caches the prepared diff per sha (commit-v3.json), renders files until a 1 500-line page budget and defers the rest behind "Load diff" / "Load all files" (?all=1, 1.8 MB raw / 70 KB br), and compresses in-process.

# D. Memory

2.0.0 idle after the QA runs: RSS 313 MB, heap 89 MB (/healthz). The 1.1.0 production process reached 750 MB+ within minutes of crawler traffic on /raw and blob pages; 2.0.0 streams those (3 MB test binary: exact bytes, Content-Length from cat-file -s, no buffer) and caps git at 12 processes. Production confirmation of the restart count is part of the post-deploy verification in docs/DEPLOY.md.

# E. Budgets (75th percentile, representative mobile)

Targets from the directive: LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1. Local results meet LCP and CLS on every page; INP is not measurable without real interaction traces — the interactive surfaces (palette, sheets, copy, tree) run no layout-thrashing work and were manually exercised on the throttled profile without visible lag. Re-measure on production after deployment with the same scripts/qa recipes (see docs/SPBGIT-2-PROGRESS.md Phase 7).

Files · main
Menu

Theme