Total Blocking Temps (TBT)

Ce que TBT mesure, le 50ms long-task math, pourquoi c’est le lab proxy pour INP (pas a Core Web Vital), et Comment corriger a red score — depuis a SEO technique.

Première publication : 26 juin 2026 · Dernière mise à jour : 3 août 2026 · Avancé

Total Blocking Temps (TBT) est le sum de le blocking portion — le temps ci-dessus 50 ms — de chaque long task entre Premier affichage de contenu et Temps d’interactivité. c’est a lab-seulement metric, le unique largest weight (30%) dans le Lighthouse Performances score, et le lab proxy pour le Core Web Vital INP (il utilisé à proxy FID). Il n’est pas a Core Web Vital et jamais montre up dans Search Console or CrUX. Lighthouse mobile thresholds: bon ≤200 ms, poor >600 ms. Vous corriger il le même façon vous corriger INP — break up long JS tasks, code-split, defer or supprimer unused JS, et cut tiers script coût. Mon honest prendre: faire il pour utilisateurs et conversions, pas pour a classement bump.

TL;DR — TBT est le total amount de temps, entre Premier affichage de contenu et Temps d’interactivité, que le principal thread était bloqué long suffisant à empêcher entrée responsiveness. Il sums le blocking portion (duration − 50 ms) de chaque long task (quelconque main-thread task over 50 ms). c’est a lab metric — le unique largest weight (30%) dans le Lighthouse 10 score et le lab proxy pour INP — mais il est pas a Core Web Vital et jamais apparaît dans CrUX or Search Console. Mobile thresholds: bon ≤200 ms, poor >600 ms. Corriger il comme vous’d corriger INP: break up long JS tasks, code-split, defer/supprimer unused JS, tame tiers scripts. Mon honest prendre: corriger il pour utilisateurs, pas pour a classement bump.

Preuve à l’appui de cette affirmation Lighthouse classifies mobile TBT at 200 milliseconds or less as good and above 600 milliseconds as poor. Portée : Lighthouse mobile TBT scoring guidance; desktop scoring differs. Niveau de confiance : élevé · Vérifié : Chrome Developers: Total Blocking Time

Ce que TBT en réalité measures

Google’s definition est le placer à commencer. TBT est “le total amount de temps après Premier affichage de contenu (FCP) où le principal thread était bloqué pour long suffisant à empêcher entrée responsiveness.” Le navigateur’s principal thread processes un task à a temps; pendant que c’est busy avec a long chunk de fonctionner, il ne peut pas react à a click, a tap, or a keypress. TBT quantifies comment beaucoup de votre page-charger window est spent dans que bloqué state.

Two definitions do tout the fonctionner ici:

  • A long task est “a task que exécute on le principal thread pour plus que 50 milliseconds.”
  • Le blocking portion de a task est son duration minus 50 ms. Tasks à or sous 50 ms contribute exactly 0 ms.

TBT est le sum de ceux blocking portions entre FCP et Temps d’interactivité (TTI). Donc Premier affichage de contenu est le commencer line: rien avant le premier paint counts, parce que il y a rien on screen à interact avec yet.

Preuve à l’appui de cette affirmation TBT sums the portion above 50 milliseconds of long main-thread tasks between FCP and Time to Interactive. Portée : Lighthouse lab metric definition; not a field Core Web Vital. Niveau de confiance : élevé · Vérifié : Chrome Developers: Total Blocking Time

The worked exemple

Google’s propre tableau est le clearest illustration. Imagine five tasks exécuter on le principal thread entre FCP et TTI:

Task durationBlocking temps (duration − 50 ms)
Task un: 250 ms200 ms
Task two: 90 ms40 ms
Task three: 35 ms0 ms
Task four: 30 ms0 ms
Task five: 155 ms105 ms
Total Blocking Temps345 ms

Tasks three et four sont sous le 50 ms line, donc ils contribute rien. Task un bloque pour 250 − 50 = 200 ms, task five pour 155 − 50 = 105 ms. Ajouter le blocking portions — 200 + 40 + 0 + 0 + 105 — et vous obtenir 345 ms de TBT. c’est a “needs improvement” score, driven presque entirely par deux heavy tasks.

Ce est le counter-intuitive partie worth internalizing: “A petit number de tasks on le principal thread ne fait pas necessarily signifier faible blocking temps. Conversely, a grand number de tasks ne fait pas necessarily lead à tons de blocking temps.” (Que framing est NitroPack’s, relayed ici — reverified contre le actif source 2026-07-18.) Ce que matters est si individual tasks cross 50 ms, pas comment nombreux tasks là sont.

Le measurement window: FCP à TTI

Le window ends à Temps d’interactivité — “le temps depuis quand lune page commence chargement à quand son principal sub-resources ont chargé et il est capable de reliably responding à utilisateur entrée quickly.” Dans Lighthouse, TTI est trouvé par searching forward pour a five-deuxième “quiet window” avec aucun long tasks et aucun plus que deux dans-flight network requêtes.

Worth noting: TTI itself était supprimé depuis Lighthouse 10 parce que il proved overly sensitive à outlier network requêtes et long tasks, producing élevé variability. TBT survived et became le principal interactivity metric. As Philip Walton put il, “Newer, alternative, metrics comme Plus grand affichage de contenu (LCP), Total Blocking Temps (TBT), et Interaction jusqu’au prochain affichage (INP) sont généralement meilleur metrics à utiliser dans placer de TTI.” TBT n’a pas remplacer TTI as le window’s endpoint — c’est a meilleur unique number pour le même underlying problème. Et TTI’s disappearance depuis le Lighthouse rapport UI n’est pas le même claim as TTI ne … plus bounding Lighthouse’s par défaut navigation window — le window itself est encore mesuré que façon sous le hood.

Preuve à l’appui de cette affirmation TTI being removed as a displayed Lighthouse metric does not by itself mean TTI stopped bounding the default Lighthouse navigation TBT window. Portée : lab recommended Niveau de confiance : élevé · Vérifié : Total Blocking Time (TBT)

Un plus scoping remarque: “FCP à TTI” décrit Lighthouse’s par défaut navigation audit précisément. Autre outils, or Lighthouse itself running a timespan trace au lieu de a complet page-charger navigation, peut total a différent mesuré window — le 50 ms long-task math ne fait pas modifier, mais le commencer et fin points de ce que obtient summed sont outil- et trace-mode-spécifique, pas a universal law de le metric.

Preuve à l’appui de cette affirmation TBT begins after FCP, but the endpoint is tool and trace-mode specific: page-load tools commonly use TTI, Lighthouse navigation audits default to stopping at TTI, and other tools or timespan traces may total a different measured window. Portée : navigation audits Niveau de confiance : élevé · Vérifié : Total Blocking Time

Is TBT a Core Web Vital? Aucun.

Ce est le la plupart courant misconception, donc let’s être blunt à propos de il. Le three Core Web Vitals sont LCP, INP, et CLS. TBT n’est pas un de les. Google’s propre wording: “Total Blocking Temps (TBT) est a lab metrics est vital dans catching et diagnosing potential interactivity problèmes que peut impact INP. Cependant, il n’est pas partie de le Core Web Vitals définir parce que ils ne sont pas champ-measurable, nor faire ils reflect a utilisateur-centric résultat.” (Le grammar dans que sentence est theirs, pas mine.)

So où fait TBT montrer up, and où doesn’t it?

  • Où vous voir il: Lighthouse, PageSpeed Insights’ lab tab, et Chrome DevTools — tout simulated/lab environments.
  • Où vous ne pas: Recherche Google Console’s Core Web Vitals rapport, CrUX, or quelconque champ données. Ceux seulement carry LCP, INP, et CLS.

Si someone indique vous they’re “watching TBT in Search Console,” they’re mistaken — GSC reports field données, and TBT isn’t a field metric.

«One correction worth being precise about: TBT being lab-recommended isn’t the same as TBT being field-impossible. You can technically compute a TBT-style total in the field with the Long Tasks API — Google says so directly: “It is possible to measure TBT in the field, but we don’t recommend this as user interaction can affect your page’s TBT in ways that lead to lots of variance in your reports.” That’s a recommendation against it, not a technical wall. What’s actually true without exception is narrower: CrUX and Search Console’s Core Web Vitals report never carry TBT, full stop — those pipelines only ever collect LCP, INP, and CLS. » (Traduction) (Résumé en français de la section trente-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

TBT is the lab proxy pour INP

Ici’s pourquoi TBT exists à tout. Lab outils charger une page dans a simulated environment avec aucun réel utilisateur, donc ils ne peut pas mesurer Interaction jusqu’au prochain affichage — INP nécessite réel clicks et taps. TBT fills que gap: “le Total Blocking Temps (TBT) metric est lab-measurable et est a proxy pour INP.”

Le deux sont mechanically connexe: “Although INP et TBT sont calculated differently, ils sont les deux reflections de a bloqué principal thread during le bootstrap traiter. Quand le principal thread est bloqué, le navigateur est delayed dans responding à utilisateur interactions.” Et empirically, “A faible TBT souvent correlates avec a faible Interaction à Suivant Paint (INP).”

But “proxy” n’est pas “substitute.” Google is explicit: “Total Blocking Temps (TBT) may be a reasonable proxy metric pour INP, but it’s pas a substitute pour INP in and of itself.” Ils diverge in réel façons:

  • Élevé TBT, fine INP. TBT mesure blocking during charger. Si votre utilisateurs ne pas en réalité essayer à interact during que bloqué window — ils wait pour lune page à regarder finished premier — leur INP peut être fine même avec an ugly TBT.
  • Fine TBT, poor INP. INP aussi covers lent event handlers et rendu fonctionner que fire après charger, plus choses comme le navigateur’s 300 ms tap delay on non-mobile-optimized pages — none de qui TBT voit.

Quand le lab et champ disagree, confiance le champ. INP (le real-utilisateur number) takes priority over TBT (le lab estimate).

Un historical remarque que trips personnes up: TBT utilisé à être le lab proxy pour Premier Entrée Delay (FID). INP replaced FID as a Core Web Vital on March 12, 2024, donc TBT est maintenant INP’s proxy. Le underlying mechanism jamais modifié — c’est toujours été à propos de a bloqué principal thread during charger — mais quelconque older article appel TBT “FID’s proxy” predates que switch.

Pourquoi TBT dominates le Lighthouse score

TBT carries le largest unique weight dans le Lighthouse Performances score — 30%, a weighting introduced dans Lighthouse 10 et, verified actif contre Chrome’s scoring docs on 2026-07-18, encore unchanged via le actuel Lighthouse 13:

MetricWeight
Premier affichage de contenu10%
Speed Index10%
Plus grand affichage de contenu25%
Total Blocking Temps30%
Décalage cumulatif de mise en page25%

Treat que tableau as version-et-date-scoped, pas a permanent constant — Lighthouse a modifié son weights avant et peut à nouveau. Re-vérifier contre Lighthouse performances scoring avant quoting il dans an audit deck.

Ce est le practical raison TBT matters pour le SEO audits même though il n’est pas a classement signal: a poor TBT a an outsized effect on que big Lighthouse number everyone screenshots. Addy Osmani’s worked exemple rend il concrete — removing un Intersection Observer polyfill cut TBT depuis 400 ms à 300 ms et lifted le Lighthouse Performances score depuis 63 à 70. Un corriger, seven points, parce que de le 30% weight.

Un plus nuance: le “Bon ≤200 ms” category threshold et le Lighthouse score sont différent scales. À score 90+ on le TBT subscore vous besoin roughly ≤300 ms on mobile, et à hit 100 vous besoin ≤100 ms. (Ceux subscore figures sont DebugBear’s documentation de le scoring curve, reverified contre le actif source 2026-07-18.) “Bon” et “100” ne sont pas le même bar.

Fait TBT affecter SEO rankings?

Pas directement — and I’ll be straighter à propos de ce que la plupart.

TBT n’est pas a classement signal. Google’s interactivity classement entrée est INP, a champ metric. TBT est a diagnostic que aide vous trouver et corriger le long tasks que hurt INP. Improving TBT peut améliorer INP, qui pourrait marginally aider lune page Experience side de rankings — mais c’est deux liens de “peut” away depuis votre positions.

Et ici’s mon réel position on le entier Core Web Vitals question, qui j’ai written avant dans mon vitesse de page guide: Je ne pas think Core Web Vitals ont beaucoup impact on SEO, et unless vous êtes extremely lent Je généralement ne va pas prioritize les. Faire les pour utilisateurs et conversions, pas pour a classement bump. Que s’applique doubly à TBT, qui est a lab proxy pour a champ metric pour a petit classement entrée. Corriger il parce que a frozen page loses vous clients — pas parce que vous êtes chasing a position.

Ce que causes élevé TBT

It’s almost toujours JavaScript:

  • Unnecessary JavaScript chargement, parsing, or execution — le Lighthouse audit’s propre words. Shipping a big bundle lune page ne fait pas besoin à charger est le classic causer.
  • Inefficient JavaScript statements — heavy synchronous fonctionner que monopolizes le principal thread.
  • Tiers scripts — balise managers, chat widgets, analytics, ad scripts. Souvent le unique biggest contributor, et le un vous contrôler le moins.
  • Heavy framework bootstrap — React hydration et similaire peut exécuter long tasks during startup.
  • Style/layout recalculation et garbage collection — forced synchronous layout, grand style recalcs, et GC pauses montrer up as main-thread tasks aussi; ne pas assume chaque long task dans le trace est JavaScript execution.

ne pas assume bundle transfer size est le entier story, soit. Trace attribution a réel gaps: cross-origin frames et worker threads ont privacy et security limites on ce que a long-task observer peut rapport à propos de les (voir Troubleshooting), donc an unattributed task dans votre trace n’est pas proof aucun tiers est involved — il peut simplement signifier le attribution API n’est pas allowed à tell vous.

Comment corriger élevé TBT

Le corrections sont le même family as le INP corrections — les deux come bas à a bloqué principal thread.

  1. Trouver le long tasks. Ouvrir le Chrome DevTools Performances panel et regarder pour tasks over 50 ms (ils sont flagged avec red corners), or exécuter le Lighthouse “Avoid long main-thread tasks” audit.
  2. Audit tiers scripts premier. ils sont généralement le easiest wins. Utiliser le DevTools Coverage et Network tabs à voir ce que chaque script coûts, et lazy-charger heavy embeds (YouTube, maps, chat) behind a facade.
  3. Break up le long tasks. Yield à le principal thread donc le navigateur peut handle entrée entre chunks — “quand tasks sont broken up, le navigateur peut respond à higher-priority fonctionner beaucoup sooner—notamment utilisateur interactions.” Le modern API est scheduler.yield(), avec a setTimeout(resolve, 0) fallback (voir le Cheat Sheets tab pour le modèle). Remarque que Google ne … plus recommends isInputPending() — yield regardless de si entrée est pending.
  4. Reduce le JavaScript. Code-split grand bundles donc moins parses et evaluates à charger, supprimer unused JS (DevTools Coverage tab montre vous ce que), et defer non-critical scripts.
  5. Déplacer heavy computation off le principal thread. Web Workers exécuter CPU-heavy fonctionner on a séparé thread, leaving le principal thread gratuit à respond.

A utile side effect: long tasks que block the principal thread peut aussi delay Plus grand affichage de contenu rendering, so fixing TBT parfois improves LCP aussi — surtout quand render-blocking JS is involved.

Où to go suivant

TBT lives dans le Core Web Vitals family alongside son champ counterpart Interaction jusqu’au prochain affichage, le chargement metrics Plus grand affichage de contenu et Premier affichage de contenu, et le lab outils Lighthouse, PageSpeed Insights, et Speed Indexer que rapport les. Si vous seulement remember un chose: TBT est le lab warning light pour champ responsiveness — chase le long tasks, pas le number.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.