Total Blocking Time (TBT)

TBT adds up how long JavaScript kept the browser too busy to respond while the page loaded. It is the heaviest metric in the Lighthouse score, at 30%.

Thresholds measured at the 75th percentile of page loads, per Google’s web.dev guidance.

The 50 millisecond rule

A browser runs JavaScript, layout and painting on one main thread. A task shorter than 50 ms feels instant, because the browser can respond to a tap right after. Any time a task runs beyond 50 ms, a tap would have had to wait. TBT adds up those overruns, which is why splitting work into small chunks lowers it even when the total work stays the same.

Split the long tasks

Total Blocking Time: 650 ms → Poor (mobile Lighthouse scale)

Grey = the first 50 ms of each task (allowed). Magenta = the part over 50 ms, which is what TBT adds up. Same total work, but split into short tasks, almost none of it blocks.

How to reduce Total Blocking Time

  • Ship less JavaScript: remove unused dependencies, and use code splitting so each route loads only what it needs.
  • Defer third parties: chat widgets, A/B testing, heatmaps and ad scripts are frequent culprits. Load them after the page is interactive, or on user action.
  • Hydrate less: server-rendered pages that re-run the whole app on the client can create one huge task. Islands or partial hydration help.
  • Yield in long loops: process data in batches and await scheduler.yield() between them.
  • Move work off the main thread: a Web Worker can handle parsing, sorting and other number-crunching.

TBT is lab-only. Its real-world counterpart is Interaction to Next Paint, which covers interactions for the whole visit, not just the load.

Questions people ask

What is Total Blocking Time?

TBT is the sum, for every main-thread task longer than 50 ms between First Contentful Paint and Time to Interactive, of the time beyond 50 ms. A 120 ms task adds 70 ms; a 40 ms task adds nothing.

What is a good TBT?

Lighthouse gives a metric score of 90 at 200 ms on mobile and 150 ms on desktop. The median site (score 50) is at about 600 ms on mobile.

Why does TBT carry 30% of the Lighthouse score?

It is the lab metric that best predicts poor responsiveness (INP) for real users, and heavy JavaScript is the most common performance problem on the modern web.

How do I find what causes long tasks?

In Lighthouse, look at “Reduce JavaScript execution time”, “Minimize main-thread work” and “Reduce the impact of third-party code”. In Chrome DevTools’ Performance panel, long tasks are marked with a red corner.