Build1 publisher3 min readPublished
A Lighthouse 100 certifies a five-metric average that stops at first interactivity
Lighthouse's performance score is a weighted average of five lab metrics whose weights add to 100, and the set leaves out Interaction to Next Paint. The 0 to 100 comes entirely from one simulated load, and field data sits next to it.
The Engineer · Build desk

What happened
- Lighthouse's performance score is a weighted average of five lab metrics: Total Blocking Time at 30 per cent, Largest Contentful Paint and Cumulative Layout Shift at 25 each, First Contentful Paint and Speed Index at 10 each.
- PageSpeed Insights shows lab and field data side by side and Google says it does not combine them, with the 0 to 100 based entirely on the lab run.
- Chrome's scoring documentation names A/B tests, ad-serving changes, internet routing, device load, browser extensions and antivirus software as normal sources of run-to-run variance.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint A gate set on the composite can only certify what one simulated load measured, so interaction latency passes untested however high the number goes.
- cost Work above 96 returns a fraction of a point for the same time saved, which makes the last four points the most expensive remaining work and the easiest to cut.
- decision A pass or fail decided on one screenshotted run is decided partly on sampling noise; several runs are what a status report needs to support a call.
Total Blocking Time counts a specific window. It sums every stretch where the main thread is blocked for more than 50 milliseconds, between First Contentful Paint and interactivity, according to the dev.to write-up on the score's composition [6]. The window closes at interactivity. A handler that blocks the thread for 300 milliseconds when a visitor opens a filter panel ten seconds after load falls outside it, and none of the other four weighted metrics measures input latency either [4].
The weights come to 100 exactly: 30 for TBT, 25 each for Largest Contentful Paint and Cumulative Layout Shift, 10 each for First Contentful Paint and Speed Index [1]. Eighty of the hundred points go to blocking time, largest paint and layout stability [2]. The score omits Interaction to Next Paint, which replaced First Input Delay, entirely [7][8]. TBT alone carries three times the weight of FCP, which the write-up gives as the reason two pages with the same first impression can land twenty points apart [2].
Each metric is scored on its own log-normal curve built from real HTTP Archive data, anchored at two fixed points: the 25th percentile of real sites scores 50, and the 8th percentile scores 90 [3]. A metric at 90 is faster than about 92 per cent of the sites in that dataset [3]. Between roughly 50 and 92 the curve is close to linear, so time shaved off a slow metric buys a predictable number of points; above 96 the same saving buys a fraction of a point [4]. The write-up attributes that flattening to the scoring function [5].
The run is one simulated load on a fixed device and network profile [17]. Since Lighthouse v6, desktop and mobile have used separate scoring curves calibrated to different real-world data. The mobile profile is throttled deliberately, so 100 on desktop and 74 on mobile is expected behaviour [11]. For a mobile score to say anything about your traffic, the devices and connections in that traffic have to resemble the throttled profile.
Chrome's scoring documentation lists A/B tests, ad-serving changes, shifting internet routing, device load, browser extensions and antivirus software as normal sources of run-to-run variance, before anything you deployed enters into it [9]. Ninety-four one minute and 88 the next is usually the same page measured under slightly different conditions [10].
PageSpeed Insights shows lab and field data side by side. Google is explicit that it does not combine them: the 0 to 100 is based entirely on the lab run, and Chrome UX Report data is reported separately [12]. Chrome's documentation says good lab data does not necessarily mean real-user experiences will also be good [13]. Core Web Vitals is field data at the 75th percentile of real visits over a rolling window. That is what Google's ranking systems read, and a site can hold 100 in the lab while failing in the field [14].
Most sites lose more to script execution than to image weight, even though images get blamed and fixed first [15]. The remedy in the write-up is sequencing. Defer what the first paint does not need. Split the bundle so the browser is not parsing code for features below the fold, and load third-party scripts after first interaction, since visitors came for something else [16].
The write-up documents what the composite contains and how much a single run moves; it does not count how many teams gate a release on the number. Chasing it does force real fixes [18]. In my view a 100 is an honest certificate for the simulated load and nothing more, and the responsiveness check belongs on field INP.
What to watch
- Whether a future Lighthouse major version adds an INP-derived lab proxy to the composite, and at what weight.
- Whether a recalibration on newer HTTP Archive data moves the 25th-percentile-equals-50 and 8th-percentile-equals-90 anchors.
- Whether PageSpeed Insights changes how prominently it presents field data next to the lab score.