# Learning index performance: measurement method Overskill publishes this first-party case study about its own Rails platform's signed-out `/learn` page. It is not a benchmark of a generated app. ## Recorded experiment - Date: September 8, 2026, 23:23:58–23:27:49 UTC. - Browser: HeadlessChrome 152.0.0.0; viewport 390 × 844; device-pixel ratio 1. - Emulation: Slow 4G network; 4× CPU throttling on one desktop host. - Six loads: baseline runs 1–3, then candidate runs 1–3. Each used a fresh browser context. The run order was sequential, not randomized or interleaved. - Both variants used the same warmed, guarded local Rails test-runtime configuration, configured Terser JavaScript compression and Rack gzip. The runtime restarted between variants. The production-only tracking pixel was absent. - Content and required controls were retained; the selected JavaScript and stylesheet changed. Signed-in visitors retained the full application assets. ## CSV fields and calculations [Download the six-row CSV](learning-performance-observations-20260908.csv). - `variant`: `baseline` means full application assets; `candidate` means focused learning assets. These are historical versions of the same page. - `run`: order within that variant, starting at 1. - `js_css_encoded_body_bytes`: sum of the two selected resources' browser ResourceTiming `encodedBodySize` values. These gzip HTTP response bodies total 1,888,949 bytes for baseline and 122,104 for candidate in every run. This excludes response headers and all other resources. Their separately recorded `transferSize` totals were 1,889,549 and 122,704 bytes respectively; neither measure is the whole page. Standalone gzip files can differ. - `lcp_ms`: trace-derived navigation-to-LCP duration, rounded to milliseconds. The LCP element was the same `P.learn-lead` text paragraph in all six traces. - `cls_rounded_2dp`: recorded main-frame layout-shift sum rounded to two decimal places. Every run was 0.03; the unrounded sum was 0.0253585166, not zero. Body-byte reduction: `(1,888,949 - 122,104) / 1,888,949 × 100 = 93.5358763%`, shown as 93.5%. Median LCP is the middle observation after sorting each group of three: 5,428 ms and 2,852 ms. The charts show every LCP point and start their numeric scales at zero. MB means decimal megabytes (1,000,000 bytes). All six rows were reconciled with the saved resource receipts and raw trace navigation/LCP events. The public extract omits local filesystem, profile, request and session details; raw traces remain internal. No new measurement was made to prepare this article. ## Separate behavior review The 24 style/geometry comparisons covered the index and five guides at 390 and 1440 px wide, 1000 px high, in light and dark themes. They swapped stylesheets on the same DOM with animations frozen. Checked properties showed no differences, no horizontal overflow and no unloaded images. These are not 24 performance runs or exhaustive visual/accessibility proof. Separate browser checks covered menu, theme persistence, brief/copy, guide contents, and navigation across the full-asset boundary. ## Limits and reuse Fresh browser contexts and emulation are not physical-phone field data. The sample is small and sequential. Production artifact hashes and byte lengths differed from the local artifacts. The initial September 9 rollout covered the index and five guides; later articles were not part of this experiment. No field Core Web Vitals, INP, generated-app, ranking, AI citation, conversion or registration improvement is established. Reuse the method and record your own result; do not adopt this percentage as a target or guarantee. The original local harness used a now-removed worktree and is not a public runnable recipe. [Read the case study](/learn/lighter-learning-pages).