Glossary
Total Blocking Time (TBT)
The time a loading page spends too busy to answer a tap.
By Roger Campos · Last updated: September 2026
TL;DR
Total Blocking Time (TBT) is a lab metric that adds up, for every main-thread task longer than 50 ms after First Contentful Paint, the time beyond those 50 ms. It measures how long the page was too busy to respond to input while loading. 200 ms or less is good; it is the lab stand-in for INP.
Free plan, no credit card. 1,000 credits a month.
How it works
How it is calculated
The browser's main thread does one task at a time: parsing, running scripts, layout. A task over 50 ms is a long task, and while it runs, input waits. TBT counts only the part of each long task past 50 ms — the blocking part — and sums them between First Contentful Paint and the point the page is reliably interactive.
| Task | Duration | Blocking time |
|---|---|---|
| Parse and run the framework bundle | 250 ms | 200 ms |
| Hydrate the page | 90 ms | 40 ms |
| Analytics init | 35 ms | 0 ms (under 50) |
| Total Blocking Time | 240 ms |
This page is just over the 200 ms line. Splitting the first task in two 125 ms halves would bring its contribution to 150 ms and the total to 190 ms.
In practice
Thresholds and weight
Lighthouse scores mobile TBT as good at 200 ms or less and poor above 600 ms; desktop runs are scored against tighter values. In Lighthouse 13 it is the single heaviest input to the performance score:
| Metric | Weight in the Lighthouse 13 performance score |
|---|---|
| Total Blocking Time (TBT) | 30% |
| Largest Contentful Paint (LCP) | 25% |
| Cumulative Layout Shift (CLS) | 25% |
| First Contentful Paint (FCP) | 10% |
| Speed Index (SI) | 10% |
The usual fixes are less JavaScript on load: code-split by route, defer third-party scripts, hydrate less of the page, and break up long functions so the browser can handle input in between.
URLpipe
Measuring TBT with URLpipe
/lighthouse returns total-blocking-time in metrics, in milliseconds, with its score. The default mobile run applies a 4× CPU slowdown, so TBT comes out far higher than on a developer's machine — on purpose, since that is closer to a mid-range phone. include_audits: "true" adds the diagnostics that name the scripts responsible.
Try it
Total Blocking Time (TBT), on a page you choose
Related terms
FAQ
Frequently asked questions
What is a good Total Blocking Time?
Is TBT a Core Web Vital?
Why is my TBT so high on mobile?
See it on your own pages.
Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.