Page weight & requests

Every request the page makes on a cold load: request count and total transfer size over the wire.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Page weight & requests

Every request the page makes on a cold load: request count and total transfer size over the wire.

71
Median (p50)
185,486 sites
120
p75
439
p99
Long tail
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

Distribution & median LCP site count and median LCP at each level of page weight & requests — n

0ms 750ms 1500ms 2250ms 3000ms
2.5s
0 8896 17791
20–29 30–39 40–49 50–59 60–69 70–79 80–89 90–99 100–109 110–119 120–129 130–139 140–149 150–159 160–169 170–179 180–189 190–199 200+
Good (≤2.5s) Needs improvement Poor (>4s) Site count
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Passing LCP by page weight & requests — n which level passes the LCP most often

Page weight & requests — nSitesPassing LCPLCP
20–29 17,500 88% 1.2s
30–39 15,496 91% 1.2s
40–49 15,953 89% 1.3s
50–59 15,288 87% 1.4s
60–69 14,180 85% 1.5s
70–79 12,620 83% 1.6s
80–89 11,068 81% 1.6s
90–99 9,527 78% 1.7s
100–109 7,902 75% 1.8s
110–119 6,786 75% 1.8s
120–129 5,886 74% 1.8s
130–139 4,970 74% 1.8s
140–149 4,249 73% 1.9s
150–159 3,685 73% 1.8s
160–169 3,200 71% 1.9s
170–179 2,716 70% 1.9s
180–189 2,254 72% 1.8s
190–199 2,010 70% 1.9s
200+ 17,791 78% 1.7s
Good Needs Improvement Poor Faded rows: under 100 sites

Page weight & requests — n 71. p75 120. p99 439. At the low end (20–29): LCP 1.2s. At the high end (200+): LCP 1.7s. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
4

Why this matters for the Core Web Vitals, and where to start fixing it

Page weight is a bandwidth problem. The network can only move so many bytes per second and every resource on the page competes for that capacity. The LCP image does not load alone. It shares bandwidth with every script, stylesheet and tracking pixel that loads at the same time. A heavier page means the main content arrives later.

Request count matters next to the bytes. Every request adds queueing and scheduling overhead. On a busy connection important requests wait behind unimportant ones. Script bytes keep costing after the download. The main thread has to parse and execute them, and that delays interactions (INP). The resource type breakdown shows where the bytes sit.

How does page weight affect the Core Web Vitals?

Page weight & requests correlate with the LCP. Where the request count is low, 88% of sites pass the LCP. Where it is high, 78% do. The decline is gradual. There is no point where sites suddenly start failing.

Related signals Cookies per site → Stylesheet initiator → Script coverage (used vs unused) → font-display strategy → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (3) — admin only
Query #1: 251.8 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.network.total.n, 0.10) AS p10,
            quantile_disc(m.network.total.n, 0.25) AS p25,
            quantile_disc(m.network.total.n, 0.50) AS p50,
            quantile_disc(m.network.total.n, 0.75) AS p75,
            quantile_disc(m.network.total.n, 0.90) AS p90,
            quantile_disc(m.network.total.n, 0.99) AS p99
            FROM sites WHERE m.network.total.n IS NOT NULL;
Query #2: 290.7 ms
SELECT CASE WHEN m.network.total.n >= 20 AND m.network.total.n < 30 THEN 0 WHEN m.network.total.n >= 30 AND m.network.total.n < 40 THEN 1 WHEN m.network.total.n >= 40 AND m.network.total.n < 50 THEN 2 WHEN m.network.total.n >= 50 AND m.network.total.n < 60 THEN 3 WHEN m.network.total.n >= 60 AND m.network.total.n < 70 THEN 4 WHEN m.network.total.n >= 70 AND m.network.total.n < 80 THEN 5 WHEN m.network.total.n >= 80 AND m.network.total.n < 90 THEN 6 WHEN m.network.total.n >= 90 AND m.network.total.n < 100 THEN 7 WHEN m.network.total.n >= 100 AND m.network.total.n < 110 THEN 8 WHEN m.network.total.n >= 110 AND m.network.total.n < 120 THEN 9 WHEN m.network.total.n >= 120 AND m.network.total.n < 130 THEN 10 WHEN m.network.total.n >= 130 AND m.network.total.n < 140 THEN 11 WHEN m.network.total.n >= 140 AND m.network.total.n < 150 THEN 12 WHEN m.network.total.n >= 150 AND m.network.total.n < 160 THEN 13 WHEN m.network.total.n >= 160 AND m.network.total.n < 170 THEN 14 WHEN m.network.total.n >= 170 AND m.network.total.n < 180 THEN 15 WHEN m.network.total.n >= 180 AND m.network.total.n < 190 THEN 16 WHEN m.network.total.n >= 190 AND m.network.total.n < 200 THEN 17 WHEN m.network.total.n >= 200 THEN 18 END AS bucket_idx, COUNT(*) AS n,
            quantile_disc(crux."all".lcp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL AND crux."all".lcp <= 2500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL), 0) AS good_pct
            FROM sites WHERE m.network.total.n IS NOT NULL GROUP BY bucket_idx;
Query #3: 16.8 ms
SELECT COUNT(*) AS count,
            quantile_disc(m.network.total.size, 0.10) AS p10,
            quantile_disc(m.network.total.size, 0.25) AS p25,
            quantile_disc(m.network.total.size, 0.50) AS p50,
            quantile_disc(m.network.total.size, 0.75) AS p75,
            quantile_disc(m.network.total.size, 0.90) AS p90,
            quantile_disc(m.network.total.size, 0.99) AS p99
            FROM sites WHERE m.network.total.size IS NOT NULL;
JSON file lookups (4)
20260625/meta.json 0.03 ms
20260625/types.json 0.95 ms
20260625/loaf-scripts.json 0.45 ms
20260625/menu.json 0.25 ms