TapCub is live — analytics, insights and live chat, free on one platform
Glossary

Total blocking time (TBT): formula, example and how to reduce it

Total blocking time adds up how long long tasks blocked the main thread during load. The formula, a worked task trace, Lighthouse thresholds, how TBT relates to FID and INP, and how to reduce it.

Chen Yu Reviewed by Xu An Also called TBT Last updated Nov 5, 2026 Glossary

Quick answer

Total blocking time (TBT) is a lab metric that sums, for every main-thread task longer than 50 ms between first contentful paint and Time to Interactive, the time beyond 50 ms. It indicates how unresponsive a page is during load.

Formula: TBT = Σ (long task duration − 50 ms)

What is total blocking time?

Total blocking time (TBT) measures how long a page's main thread was blocked during load, making the page unable to respond to input. It adds up the "blocking" portion of every long task (a task over 50 ms) between first contentful paint and Time to Interactive.

TBT = Σ (duration of each long task − 50 ms)

The 50 ms allowance exists because a task under 50 ms still lets the browser respond to a click within roughly 100 ms, which feels instant. Anything beyond that is time the user would have to wait.

TBT is a lab metric: Lighthouse and similar tools measure it in a controlled load. It is the lab counterpart of field responsiveness metrics such as Interaction to Next Paint.

Worked example

Five main-thread tasks run after first contentful paint (sample trace):

TaskDurationBlocking time (duration − 50 ms)
Framework hydration250 ms200 ms
Analytics and tag manager90 ms40 ms
Style recalculation35 ms0 ms (not a long task)
Third-party chat widget120 ms70 ms
Image carousel init60 ms10 ms
Total555 ms of workTBT = 320 ms

Splitting hydration into five 50 ms chunks would remove 200 ms of TBT on its own, without doing any less work, because each chunk lets the browser handle input in between.

TBT thresholds

Lighthouse scores TBT on mobile roughly as:

RatingTBT (mobile)
Good0–200 ms
Needs improvement200–600 ms
Poorover 600 ms

In Lighthouse 10 and later, TBT carries 30% of the performance score, more than any other metric.

TBT, FID and INP

MetricMeasuredWhat it captures
TBTLabTotal main-thread blocking during load
First input delay (retired 2024)FieldDelay before the first interaction was handled
Interaction to Next PaintField (Core Web Vital)Latency of interactions across the whole visit

A high TBT in the lab is a strong hint that real users will see poor INP, especially on slower phones. But TBT only covers the load phase; INP also catches slow interactions later on.

How to reduce TBT

  1. Break up long tasks. Split work into chunks and yield to the main thread (for example with scheduler.yield() or setTimeout).
  2. Ship less JavaScript: remove unused code, code-split by route, avoid large polyfills.
  3. Defer or lazy-load third-party scripts such as chat widgets, A/B testing and tag managers until after interaction or idle time.
  4. Hydrate less: partial or progressive hydration, server components, islands.
  5. Move heavy work off the main thread into web workers.
  6. Avoid layout thrashing from reading and writing layout properties in loops.

In TapCub

TBT needs a controlled lab run, so TapCub, which measures real visits, does not report it. Its performance report shows the field metrics that TBT predicts: INP for responsiveness, plus LCP, CLS, time to first byte and first contentful paint, at P75 or P95 by page, device and browser. Use Lighthouse to find long tasks during development, then check INP in TapCub to confirm real users feel the difference. The TapCub script itself is small and loads without blocking parsing. See Core Web Vitals and synthetic monitoring.

Sources

Was this explanation clear?

We use your answers to fix and expand this page.

Chen Yu

Technical Engineer

Focuses on tracking code, SDKs, and API integrations, with practical guidance on implementation checks and troubleshooting.

FAQ

Questions people ask

Short answers to the follow-up questions that come up most.

Still have a question?

Chat with the team behind TapCub — we usually reply within a few hours on business days.

What is a good total blocking time?

Under 200 ms on mobile in Lighthouse; above 600 ms is poor.

Is total blocking time a Core Web Vital?

No. It is a lab metric. Its field counterpart, Interaction to Next Paint, is the Core Web Vital for responsiveness.

What counts as a long task?

Any main-thread task over 50 ms. Only the part beyond 50 ms counts toward TBT.

How do I reduce TBT quickly?

Defer third-party scripts and split large JavaScript tasks so the main thread can respond between chunks.

See this number on your own site

Add one script tag for web and apps, and the first reports fill in within minutes.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics