From a532f9d377220f79e10f65092e2dd2f0a353b7c9 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Sun, 9 Aug 2026 03:21:21 +0200 Subject: [PATCH] docs(perf): repetition-backed headline, round-3 result, unpursued levers Headline moves from single-sample -36% to repetition-backed -34% idle / -35% loaded (2 before, 3 after, groups non-overlapping). Round 3 (API-docs SPA lazy-loaded, MCP SDK external) is recorded as NOT a memory win: every figure lands inside the previous build's spread, so it is credited only with the deterministic -3 MB image. Also records the measured cost of the levers not pursued: in-image Redis is 8.1 MiB RSS (the catalog guessed 10-40 MB) and nginx 9.2 MiB RSS / 3.1 PSS, so neither justifies its deployment risk. next-server is 225.8 of ~236 MiB at board-loaded, so anything further has to come out of that heap. --- PHASE2-FINDINGS.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/PHASE2-FINDINGS.md b/PHASE2-FINDINGS.md index 779e4fab6..8e28478cd 100644 --- a/PHASE2-FINDINGS.md +++ b/PHASE2-FINDINGS.md @@ -155,6 +155,40 @@ The two groups do not overlap on any stage. The before-side idle samples land wi noise. Earlier single-sample rounds suggested −36%; the repeated figure is **−34%**, and that is the number used in the PR. +## Round 3 — tried, and reported as not a memory win + +`@scalar/api-reference-react` (a docs SPA behind one admin tab) moved to +`next/dynamic` with `ssr: false`, and `@modelcontextprotocol/sdk` to +`serverExternalPackages`. + +| metric | previous build | with round 3 | +| --- | --- | --- | +| idle | 90.3 / 91.1 / 100.5 | 89.4 | +| board loaded | 163.5 / 164.6 / 176.8 | 161.5 | +| peak | 568.0 / 590.9 / 594.2 | 563.9 | +| image | 401 MB | **398 MB** | +| CPU s | 17.0 | 17.5 | + +Every memory figure lands **inside** the previous build's spread. At the better end of +it, but inside — so on one sample this is not a demonstrated reduction and is not counted +in the headline. Kept anyway for the deterministic −3 MB image and because a +documentation SPA should not be compiled for an SSR pass that discards its output. + +Recording it here rather than quietly folding it into the total: the whole point of the +harness is to stop plausible-sounding changes from being credited with wins they did not +produce. + +## Measured but not pursued + +| lever | measured cost | why not pursued | +| --- | --- | --- | +| in-image Redis (F12) | **8.1 MiB RSS** (6.3 PSS) | The catalog estimated 10–40 MB; the real figure is 8. Removing it means replacing the pub/sub bus for single-instance — real risk for ~5% of the footprint. | +| in-image nginx (F13) | **9.2 MiB RSS** (3.1 PSS) | Two processes, but PSS is 3 MiB. It terminates TLS and proxies; not worth the deployment change at this size. | +| locale subset (F19) | ~12 MB image | Reduces languages a user can pick — a product decision, not an optimisation, and it does not move RAM. | + +`next-server` is **225.8 MiB RSS of the ~236 MiB total** at board-loaded, so process-level +trimming has little left to give. Further wins have to come out of that one heap. + ## Is the measurement actually behind a login? Worth stating explicitly, because "28 widgets rendered" would be meaningless if the board