TBT
Total Blocking Time
Total time the main thread was blocked during page load — lab metric only.
- Good: ≤ 150ms
- Needs improvement: ≤ 350ms
- Poor: > 350ms
Main thread
TBT07070220230msUp to 50 msBlockingof 455 ms
Tasks run on the main threadTasks run on the main threadTasks run on the main threadTasks run on the main threadEvery millisecond past 50 ms blocks input
What is TBT?
Total Blocking Time (TBT) measures the total time between First Contentful Paint and Time to Interactive during which the main thread was blocked for more than 50ms. It is a lab-only metric that correlates strongly with INP in the field.
Why does it matter?
TBT is a reliable lab proxy for real-world interactivity. When CrUX field data is unavailable, TBT from Lighthouse is the best indicator of how users will experience interactions.
What is a good TBT score?
ms
Good
Exceptional — main thread is highly available.
How to improve TBT
Long tasks are the root cause — break them up.
01
Large JavaScript bundles
Parsing and compiling large JavaScript bundles blocks the main thread.
Fix Audit with Chrome DevTools Coverage tab. Remove unused code. Split bundles with dynamic import() and defer non-critical modules.
02
Third-party scripts
Analytics, chat widgets, ad scripts, and social embeds run on the main thread.
Fix Load non-critical scripts with async or defer. Facade slow embeds.
03
Long event handlers
JavaScript functions that run for more than 50ms at a time create long tasks.
Fix Break long tasks into smaller chunks using scheduler.yield() or setTimeout(fn, 0).
Need help fixing your TBT?
Root cause analysis, not plugin guessing. Baseline from field data or lab — wherever you are.
Start an Engagement