Total Blocking Time (TBT)

Your website might look ready for interaction while remaining completely unresponsive to user input. Total Blocking Time (TBT) reveals the hidden performance issue that makes interfaces feel sluggish even after content loads.

Total Blocking Time (TBT)

How JavaScript Blocks User Interactions

TBT measures the total time between First Contentful Paint and Time to Interactive when the main thread was blocked long enough to prevent input responsiveness. This metric exposes JavaScript processing bottlenecks that create unresponsive user experiences.

Understanding TBT Benchmarks

Good TBT: 200 milliseconds or less
Needs Improvement: 200 to 600 milliseconds
Poor TBT: 600 milliseconds or more

These thresholds represent cumulative blocking time, not individual delays. Even pages with good loading speeds can have poor TBT if JavaScript continuously blocks user interactions.

TBT vs FID: Complete vs First Interaction

TBT provides a more comprehensive view of interactivity issues than First Input Delay (FID). While FID measures first interaction delay, TBT captures the overall blocking time during page load.

FID only activates when users actually interact with your page. TBT measures potential blocking regardless of user behavior, making it ideal for lab testing and proactive optimization.

Consider TBT as the total "unresponsive time" users might experience, while FID represents the actual delay they encounter on their first interaction attempt.

The Long Task Problem

Long tasks—JavaScript execution over 50 milliseconds—contribute to TBT. Reducing these tasks improves both TBT scores and actual user experience.

The browser's main thread handles both JavaScript execution and user interactions. When JavaScript runs for extended periods, users cannot click buttons, scroll smoothly, or interact with forms.

Common Long Task Sources:

  • Large JavaScript framework bundles
  • Third-party analytics and tracking scripts
  • Complex DOM manipulation during page load
  • Synchronous API calls and data processing
  • Heavy image or video processing

Immediate TBT Improvements

Focus on these high-impact optimizations:

Optimize Third-Party Scripts: Audit external scripts for performance impact. Load non-critical third-party code asynchronously or defer until after user interactions complete.

Defer Non-Critical JavaScript: Move analytics, social widgets, and marketing scripts to load after primary functionality becomes interactive.

Break Up Large Tasks: Split JavaScript functions exceeding 50ms into smaller chunks using setTimeout() or requestIdleCallback() to yield control back to the browser.

Remove Unused Code: Eliminate dead JavaScript code and unused library features. Tools like webpack-bundle-analyzer identify optimization opportunities.

Advanced Processing Optimization

Implement Code Splitting: Load only essential JavaScript initially. Split large applications into smaller bundles that load on demand based on user interactions.

Use Efficient Coding Practices: Replace inefficient loops and DOM queries with optimized alternatives. Cache DOM selections and use document fragments for bulk updates.

Minimize Main Thread Work: Move heavy computations to Web Workers. Process data, perform calculations, and handle complex logic off the main thread.

Optimize Framework Usage: Configure React, Vue, or Angular for production builds. Enable tree shaking and minimize development-only code in production environments.

Business Impact of Processing Efficiency

High TBT directly correlates with user frustration and abandonment. Users expect immediate responsiveness, especially on mobile devices with limited processing power.

E-commerce sites see conversion drops when checkout processes feel unresponsive. Content sites lose engagement when scrolling and navigation lag due to JavaScript blocking.

Professional applications require consistent responsiveness to maintain user productivity and satisfaction.

Ready to get your 360° website view?

Start analyzing your website performance today.

Start Analysis