Registered study · pilot

Do Lighthouse's promised savings materialize?

Lighthouse and PageSpeed Insights don't just flag problems — for many they print a number: “Est savings: 1,200 ms.” Those numbers drive sprint priorities, agency reports and automated optimizers. Yet nobody has systematically checked whether they come true. We built the method, ran a controlled pilot, and publish the full protocol to measure it at web scale.

What we measured

The question is one of calibration: when you implement a recommendation exactly, does the predicted saving P equal the realized saving R? To get a first signal we built a controlled harness. For each engineered, single-audit page we read Lighthouse 13's predicted metric saving (the insight's metricSavings map), applied the exact fix, and measured the realized saving as a paired median-of-five run delta — the same shape of comparison Google's own Lantern validation uses.

Scatter of predicted versus realized savings. All eight points sit on or above the perfect-calibration diagonal: render-blocking points are clearly above it (realized exceeds predicted), image-delivery points sit just above it, and the two render-block-gated image points are also on it.
Figure 1 — Predicted (x) vs realized (y) saving, in milliseconds. The dashed line is perfect calibration. Every point sits on or above it: on these controlled pages Lighthouse 13's predictions materialized, and were if anything conservative.
8 / 8cases where the predicted saving materialized
1.0–1.9×realized ÷ predicted across all cases
≈ 1.1×image-delivery — near-perfect, tightening as the image grows
≈ 1.7×render-blocking — Lighthouse under-promised here
Bar chart of the realized-over-predicted ratio per case: render-blocking 1.91, 1.53, 1.71; image-delivery 1.30, 1.09, 1.04; the two gated image cases 1.05 and 1.32. All bars exceed the 1.0 line.
Figure 2 — Materialization ratio (realized ÷ predicted) per case. 1.0 is a perfectly delivered prediction; every case met or exceeded it.

Two honest surprises. First, the common cynicism — “Lighthouse over-promises” — did not reproduce on clean pages. If anything, render-blocking predictions under-promised: a fix Lighthouse valued at 150 ms delivered 287. Image-delivery was the most accurate, and tightened toward 1.0 as the image got heavier (1.30× at 300 KB → 1.04× at 1.8 MB). Second, we tried twice to construct the classic over-prediction trap — a heavy image whose paint should be gated by a render-blocking stylesheet — and both times the prediction still materialized, because the image stayed on the critical path. Reproducing over-prediction needs the messy real web, not a synthetic page. Which is precisely the point of the study below.

Why this needs measuring at all

A forecast can be useful even when imperfect — but only if its error is known. Weather forecasts, credit models and medical risk scores are all judged by calibration. Lighthouse's savings number is a forecast too, and as far as we can find, no published study compares predicted savings against realized improvement after an exact fix. The pieces that look like validation aren't:

  • Lantern validates the wrong thing. Lighthouse's Lantern accuracy doc reports Spearman's ρ and MAPE for FCP/FMP/TTI on 300 URLs, comparing the median of nine runs in one environment to nine in another. That tests whether simulated metrics resemble lab metrics — not whether fixing a flagged opportunity yields the predicted delta. Those are different inferential problems.
  • Lighthouse 13 changed the surface, not the validation. In 2025 Google replaced legacy performance audits with “insights”; Lighthouse 13 made the switch permanent (the score is metric-based, so it's unchanged). The release notes document the migration — they don't publish a per-insight calibration study.
  • The maintainers themselves flag the failure modes. A 2019 issue (#8740) modeled image-optimization impact while admitting load-time gains can “fall to zero if JS rendering takes ages.” A 2022 issue (#14107) shows a user summing five savings and asking which metric the total maps to — a common, and usually invalid, move.
  • Recent automated-fix work measures something else. The MSR 2026 study on LLM DOM-level performance fixes reports reductions in audit incidence, not whether the predicted milliseconds appeared. An audit can vanish without the saving arriving; a metric can improve while the audit stays flagged.

So the gap is real and specific: the savings number is decision-grade only if we know its error, by audit type. The pilot says “on clean pages, decent and conservative.” The study below says how to learn whether that survives contact with real sites.

The estimand

For each page i, audit a and metric m, Lighthouse reports a predicted saving P. After implementing exactly that fix, the realized saving is the paired median-of-nine delta:

R = median(metric, baseline) − median(metric, intervention)
calibration error   E = R − P          (negative ⇒ over-prediction)
materialization     Q = R / P          (1.0 ⇒ fully delivered)

A forecast can fail in distinct, useful-to-separate ways. It can be magnitude-miscalibrated (a 900 ms prediction that yields 100 ms), yet still rank opportunities correctly (the biggest predicted fix is the biggest real one) — in which case it's fine for triage but not forecasting. And savings are usually non-additive: five fixes rarely sum, because they compete for the same critical path. The study estimates all three — calibration, ranking utility, and non-additivity — per audit, not as one global number, because a single slope would hide exactly the differences a practitioner needs.

The full study (registered protocol)

The pilot proves the harness works. To answer the question for the web as practitioners meet it, the registered design scales it to real pages and adds a field arm. It is written to be executed, audited and extended — the companion workbook ships the full data schema with result fields left deliberately blank.

  1. Sample 100–200 real pages

    Stratified across rank, page type, framework, resource profile and baseline speed, from the public HTTP Archive / CrUX frame — calibration should hold for the messy web, not just clean lab pages.

  2. One audit at a time, by a fixed grammar

    “Implement exactly what Lighthouse says” is ambiguous, so each fix follows a pre-registered, minimal patch grammar applied at the HTTP boundary via a proxy. A resolution gate requires the post-fix report to clear the audit (or cut its predicted saving ≥ 90%); a semantic gate (visual diff, DOM and console checks) guards against fixing the number while breaking the page.

  3. Paired median-of-nine

    Nine baseline and nine intervention runs, alternated in randomized blocks, on a pinned single-tenant runner — because Lighthouse's own variability guidance and Lantern validation both rely on medians, not single before/after runs.

  4. Audit-level calibration cards

    Per insight: median predicted vs realized, signed error, materialization rate, SMAPE, the calibration slope, ranking correlation and the non-resolution rate — so teams can see that, say, image-delivery is decision-grade while another family is only directional.

  5. A field arm for ecological validity

    Join monthly HTTP Archive Lighthouse transitions to CrUX deltas (the History API offers up to 40 overlapping 28-day windows): when an audit flag disappears in the wild, do real-user metrics improve versus matched controls? Observational and secondary — it can't replace the controlled estimand, but it tests whether the lab result has a real-world correlate.

The fixes are deterministic by audit family. A sample of the grammar:

Intervention grammar (excerpt). Each rule is the smallest proxy transformation that satisfies the recommendation while preserving page semantics.
Audit / insight familyMinimal fixPrimary metric
Render-blockingInline critical CSS / defer non-critical stylesheets and eligible scriptsFCP, LCP
Image deliveryRe-encode/resize flagged images to recommended bytes; preserve rendered dimensionsLCP, bytes
LCP discoveryRemove lazy-load from the LCP image; add preload / fetchpriority=highLCP
Document request latencyServe flagged text with gzip/br; collapse redirect chains; fix TTFB at a controlled edgeFCP, LCP
Network dependency treeAdd preconnect/preload only for named origins — no speculative preloadingFCP, LCP
Legacy / duplicated JavaScriptServe the modern/de-duplicated bundle when a functionality gate passesTBT

Method — the pilot

Limitations — read before quoting

  1. Clean pages, not the real web

    The pilot's whole limitation is its cleanliness. Synthetic single-audit pages isolate the effect perfectly — which is exactly why predictions look well-calibrated. Real pages have JS that gates paint, third parties, A/B tests and field-vs-lab gaps that the full study exists to capture.

  2. The over-prediction case is unproven

    We could not synthesize a confound where Lighthouse over-predicts; the optimized resource stayed on the critical path. So the pilot shows predictions can be conservative, not that they never over-promise. Don't read it as “Lighthouse is always right.”

  3. Small N, two families

    Eight cases across render-blocking and image-delivery. The calibration map needs many audit families at n ≥ 30 each — descriptive only below that.

  4. Pilot used median-of-five

    To keep runtimes bounded; the registered protocol prescribes median-of-nine. All runs are retained for the published dataset.

  5. One pinned version

    Lighthouse 13.4.0. Predictions change across versions; the calibration card is versioned and meant to be re-run at major releases.

Data, protocol & sources

The pilot dataset and the full study workbook (data model, dictionary, calibration formulas and SQL templates, with empirical fields blank) are published under CC BY 4.0 — run the harness, disagree with the design, or execute the full study and publish the cards.

Key sources

Cite this study

PageSpeedAudit Research (2026). Do Lighthouse's promised savings materialize?
A registered calibration study of PageSpeed Insights and Lighthouse predicted
metric savings. https://pagespeedaudit.com/research/do-lighthouse-savings-materialize

@misc{pagespeedaudit2026lighthousecalibration,
  title  = {Do Lighthouse's promised savings materialize? A registered
            calibration study of Lighthouse predicted metric savings},
  author = {{PageSpeedAudit Research}},
  year   = {2026},
  url    = {https://pagespeedaudit.com/research/do-lighthouse-savings-materialize},
  note   = {Pilot dataset + protocol workbook, CC BY 4.0}
}

Want to know which of your savings are real?

A PageSpeedAudit report doesn't just forward Lighthouse's numbers — it reads your real critical path and tells you which fixes will actually move LCP and INP, and by how much. Our sister study “The cost of a kilobyte” measures what a fix is worth per resource type, and the free cloaking test checks whether a “95+” score is even real.