How we measure

Every page on this site states its own weight in the footer. A weight only means something for one stated setup, because the image a browser picks, the formats it supports, its cache and any requests it defers all change the total. So the footer names its setup: phone, AVIF, fresh visit. This page spells that setup out.

The reference profile

SettingValue
Viewport412 × 823 CSS px, the Lighthouse mobile emulation
Device pixel ratio1.75
BrowserChromium, current stable, with AVIF support
CacheCold: a new browser context, no service worker, no HTTP cache
CompressionAs the production CDN serves it, Brotli where offered
BoundaryInitial load: navigation to the load event, with no scrolling or input
What countsThe transfer size of the navigation entry and of every resource entry in Resource Timing, same-origin and third-party alike
Checked againstThe deployed preview URL for the pull request, not a local server

Two boundaries, not one

We use two byte boundaries, and they are not interchangeable.

The footer figure is therefore a little larger than the before-LCP figure, because it runs later. Images further down the page that only load when you scroll are not counted in either.

How the printed number is made

The number in the footer is not typed in by hand. When the site is built, we load each built page under the reference profile, record what the browser fetches for the initial load, add up the Brotli-compressed size of those files, and write the total into the page.

The 5% check

Before a change ships, our tests load every page on the deployed preview under the same profile and add up the transfer sizes the browser reports. If the measured figure and the printed figure differ by more than 5%, the build fails. A mismatch means our model of what the browser fetches is wrong, so we fix the model instead of waiving the check.

The build also fails if either figure goes over the page’s initial-load budget: 200 KB for the home page and 140 KB for every other page.