HomeMethod

Knowledge

Web VitalsTechniquesSnippetsAnswersImpactsBottlenecks

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

30 ms120 ms45 ms200 ms60 ms

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?

0ms

Good

0ms150ms350ms700ms

Exceptional — main thread is highly available.

How to improve TBT

Long tasks are the root cause — break them up.

  1. 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.

  2. 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.

  3. 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
Support our family now