Skip to content

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

Illustration accompanying A Lighthouse 100 certifies a five-metric average that stops at first interactivity

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.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories