Total Blocking Time (TBT)
Total Blocking Time (TBT) measures how long the main thread was blocked between First Contentful Paint and Time to Interactive. For each task longer than 50 milliseconds, the portion above 50ms counts as blocking time, and TBT is the sum of those portions. It is a lab metric — Lighthouse reports it — and web.dev treats it as a proxy for field responsiveness because high TBT usually predicts a poor Interaction to Next Paint.
What this means
TBT measures the total time the main thread was unable to respond to input between FCP and TTI. A task is counted only for the time it runs beyond 50 milliseconds, because tasks under 50ms are considered short enough not to block a meaningful interaction.
How the threshold works
If a task runs for 120ms, its blocking time is 70ms (120 minus the 50ms threshold). TBT sums those blocking portions across every long task in the window. Lighthouse computes TBT in a controlled lab environment, which makes it reproducible but not a substitute for field measurement.
- Blocking time per task = task duration − 50ms
- TBT = sum of blocking times between FCP and TTI
- Lab proxy for field Interaction to Next Paint
Why it misleads
TBT is a lab metric: it reflects the test device and a single load, not the range of real interactions. A page can have high TBT yet feel fine if users never interact during the busy window, which is exactly why INP exists for field responsiveness. Use TBT to diagnose, INP to confirm.
How it appears in analytics and logs
A high TBT means long JavaScript tasks monopolised the main thread during load, so input that arrives in that window would be delayed — it signals scripting cost, not paint or layout cost.
Diagnostic use case
Use TBT in lab tests to quantify how much heavy JavaScript blocks the main thread during load, as a stand-in for the responsiveness problems INP catches in the field.
What WebmasterID can help detect
WebmasterID focuses on first-party traffic classification; TBT is a lab signal you can pair with field INP captured against human-classified sessions.
Common mistakes
- Treating lab TBT as a field responsiveness measurement.
- Counting whole task durations instead of the part above 50ms.
- Optimising TBT while ignoring the field INP it predicts.
Privacy and accuracy notes
TBT is a main-thread timing measurement, not personal data. This page is educational, not legal advice.
Related pages
- Interaction to Next Paint (INP)
Interaction to Next Paint (INP) measures a page's responsiveness by observing the latency of every click, tap, and key press during a visit and reporting a representative high value — close to the worst. Latency spans from the input to the next frame the browser paints. INP became a Core Web Vital in March 2024, replacing First Input Delay, because it captures the full processing-plus-render cost across all interactions, not just the delay of the first one.
- Time to Interactive (TTI)
Time to Interactive (TTI) measures how long it takes a page to become reliably interactive — visually rendered, with event handlers registered, and responding to input quickly. The definition looks back from a five-second quiet window (no long tasks, limited network requests) to the last long task before it. TTI is a lab metric from Lighthouse; web.dev now steers teams toward TBT and the field metric INP, since TTI is sensitive to single long tasks.
- First Contentful Paint (FCP)
First Contentful Paint (FCP) measures the time from navigation start to when the browser first renders any DOM content — text, an image, a non-white canvas, or SVG. The Paint Timing API exposes it as the first-contentful-paint entry, and web.dev treats it as the moment a visitor first sees that something is happening. It precedes Largest Contentful Paint, which marks the largest element, so the two answer different questions about perceived load.
- Website observability
Lab and field signals on one fabric.
Sources and verification notes
Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.