Reference guide · performance · Published 2026-08-16 · 3 min read

TTFB vs FCP explained

TTFB vs FCP: how server time becomes render time, why fast TTFB is not fast FCP, and the fix route for each leg.

Flat editorial illustration showing a speedometer gauge with a rising needle, clean tick marks and small trailing dots.
Illustration: this article at a glance.

The two clocks

TTFB (Time To First Byte) measures the gap until the browser receives the first byte of the HTML response: DNS, connection, the server processing, and the first response byte. FCP (First Contentful Paint) measures when the browser paints the first content (text, image, or canvas) after that byte arrives.

Editorial close-up illustration showing a speedometer gauge with a resting needle, clean tick marks and small trailing dots.
Illustration: a closer look at the technique described above.
MetricMeasuresWhat happens in the gap
TTFBRequest to first HTML byteDNS, connect, server work, CDN
FCPRequest to first content paintAll of TTFB, plus HTML parse, CSS, render-blocking resources, first paint

So FCP is built on top of TTFB: a slow first byte pushes every downstream metric out, but a fast TTFB guarantees nothing about FCP because the browser still has to parse, fetch blocking CSS, and paint.

Why fast TTFB still means slow FCP

Four real situations where TTFB is quick and FCP stays slow:

TTFBFCPCause
80 ms1.8 sA render-blocking stylesheet (style.css) sits between the first byte and first paint
80 ms3 sA large un-bundled JS file parses and runs before FCP
120 ms1.5 sThe HTML is small but the font or CSS is big
40 ms900 msA remote Web Font or third-party blocks first paint

The browser does not paint until the render-blocking CSS is fetched and the script that would unblock it has run. Remove the blocking CSS from the critical path (inline critical CSS, defer external styles) and FCP drops even when TTFB never changes.

Which metric to fix first

Start with TTFB if the raw number is high, because it caps everything: TTFB optimisation works the server and database cache leg. Once TTFB is under, say, 200 ms for a dynamic page, FCP is determined by the render path, which is where the critical rendering path and the render-blocking resources articles take over.

Fix targetSymptomFocus
TTFBThe network tab waits on the origin for every pageServer response time, DB, page cache, CDN
FCPFirst byte is fast but white screen / spinner persistsCritical CSS, script order, render-blocking JS

Lighthouse splits these for you: the "Reduce server response times" audit is TTFB, and the "Eliminate render-blocking resources" audit is the FCP side. When the field data says LCP is poor, trace the FCP leg first, because LCP includes FCP and the largest-element paint depends on the first paint path.

The mental model

TTFB is the door; FCP is the first visible room. If the door opens late, nothing else can start; if it opens on time but the first paint waits on a stylesheet, the room is empty while the wall is being built. Fix the door (server) when the door is slow, fix the rendering (CSS/JS) when the room is empty. An LCP of 3 seconds with a 40 ms TTFB is a render problem, not a server problem, which is the whole point of splitting the number.

The LCP optimisation guide treats the whole timeline as legs and the TTFB optimisation article dives into the server side, so the two readings plus the core web vitals framework keep the divide honest.

Need a website built, fixed, optimised, migrated or replaced?

This technical resource is written by CSMBAC, a small design and development studio. If you would rather hand the problem to a professional, the website service page explains how we build enquiry-ready websites.

Explore website services