TTFB distribution
How TTFB is distributed across real-user data, plus pass-rate breakdown.
At a glance the headline numbers for TTFB distribution
How TTFB is distributed across real-user data, plus pass-rate breakdown.
0.0% of sites good on TTFB. The typical site's TTFB is —. The worst 10% are above —.
TTFB Distribution the value at each percentile across all sites
Why this matters for the Core Web Vitals, and where to start fixing it
Time to First Byte is how long the browser waits for the server to start replying. It is a diagnostic metric, not a Core Web Vital, but it is the foundation the others are built on: nothing can render until the first byte arrives, so a slow TTFB pushes back every paint that follows. The causes are on the server and the network, slow backend processing, no caching, or a long trip to a distant origin.
Start by getting a fast, cacheable response out the door. Cache full pages where you can, put a CDN in front so visitors are served from nearby, and keep the backend work on each request small. Early Hints use that wait: the browser can start fetching critical resources while the server is still building the page.
Chrome field data from 189,915 sites, representing millions of real page loads. How we measured.
Live queries (1) — admin only
SELECT COUNT(*) AS count,
COUNT(*) FILTER (WHERE crux."desktop".ttfb <= 800) * 1.0 / COUNT(*) AS good,
COUNT(*) FILTER (WHERE crux."desktop".ttfb > 800 AND crux."desktop".ttfb <= 1800) * 1.0 / COUNT(*) AS needs_improvement,
COUNT(*) FILTER (WHERE crux."desktop".ttfb > 1800) * 1.0 / COUNT(*) AS poor,
quantile_disc(crux."desktop".ttfb, 0.10) AS p10,
quantile_disc(crux."desktop".ttfb, 0.25) AS p25,
quantile_disc(crux."desktop".ttfb, 0.50) AS p50,
quantile_disc(crux."desktop".ttfb, 0.75) AS p75,
quantile_disc(crux."desktop".ttfb, 0.90) AS p90,
quantile_disc(crux."desktop".ttfb, 0.99) AS p99
FROM sites WHERE 1=1 AND crux."desktop".ttfb IS NOT NULL;