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.
What problem does it solve?
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?
How to improve TBT
The key is to tackle issues related to each contributing phase.
Large JavaScript bundles
Parsing and compiling large JavaScript bundles blocks the main thread. Every millisecond the browser spends executing JS is time it cannot respond to user input.
Audit your JavaScript with the Chrome DevTools Coverage tab. Remove unused code. Split bundles with dynamic import() and defer non-critical modules until after first interaction.
Third-party scripts
Analytics, chat widgets, ad scripts, and social embeds run on the main thread. They are often the primary source of TBT — and uncontrollable once loaded.
Audit third parties with WebPageTest. Load non-critical scripts with async or defer. Facade slow embeds — load the real thing only when the user interacts with a placeholder.
Long event handlers
JavaScript functions that run for more than 50ms at a time create long tasks. WordPress sites commonly have this from jQuery plugins, sliders, and inline scripts.
Break long tasks into smaller chunks using scheduler.yield() or setTimeout(fn, 0). Profile with the Chrome DevTools Performance panel to identify the specific offenders.
Root cause analysis, not plugin guessing. Baseline from field data or lab — wherever you are.