Hướng dẫn về Total Blocking Time (TBT)

Điều gì TBT measures, đó 50ms dài-task math, vì sao đây là đó lab proxy cho INP (không một Cốt lõi Web Vital), và cách sửa một red score — từ một SEO kỹ thuật.

Xuất bản lần đầu: 26 thg 6, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ

Total Blocking Time (TBT) là đó sum of đó blocking portion — đó time trên 50 ms — of mỗi dài task giữa Đầu tiên Contentful Paint và Time để Interactive. đây là một lab-chỉ chỉ số, đó single largest weight (30%) trong đó Lighthouse Performance score, và đó lab proxy cho đó Cốt lõi Web Vital INP (điều này được dùng để proxy FID). Điều này không phải một Cốt lõi Web Vital và không bao giờ cho thấy lên trong Search Console hoặc CrUX. Lighthouse mobile thresholds: good ≤200 ms, poor >600 ms. Bạn cách sửa điều này cùng cách bạn cách sửa INP — break lên dài JS tasks, code-split, defer hoặc xóa unused JS, và cut bên thứ ba script cost. My honest take: làm điều này cho người dùng và conversions, không cho một xếp hạng bump.

Tóm tắt — TBT là total amount của time, giữa đầu tiên Contentful Paint và Time để Interactive, đó main chuỗi trao đổi là blocked dài đủ để ngăn input responsiveness. nó sums blocking portion (duration − 50 ms) của mỗi dài task (bất kỳ main-chuỗi trao đổi task over 50 ms). nó lab chỉ số — single largest weight (30%) trong Lighthouse 10 score và lab proxy cho INP — nhưng nó là không Cốt lõi Web Vital và không bao giờ xuất hiện trong CrUX hoặc Search Console. Mobile thresholds: good ≤200 ms, poor >600 ms. khắc phục nó như bạn’d khắc phục INP: break lên dài JS tasks, code-split, defer/xóa unused JS, tame thứ ba-party scripts. My honest take: khắc phục nó cho người dùng, không cho xếp hạng bump.

Evidence for this claim Lighthouse classifies mobile TBT at 200 milliseconds or less as good and above 600 milliseconds as poor. Scope: Lighthouse mobile TBT scoring guidance; desktop scoring differs. Confidence: high · Verified: Chrome Developers: Total Blocking Time

Điều gì TBT thực ra measures

Google definition là đó place để bắt đầu. TBT là “the total amount of time after First Contentful Paint (FCP) where the main thread was blocked for long enough to prevent input responsiveness.” (bản dịch) «đó total amount of time sau Đầu tiên Contentful Paint (FCP) nơi đó main chuỗi trao đổi đã là blocked cho dài đủ để ngăn input responsiveness.» Đó trình duyệt main chuỗi trao đổi xử lý một task tại một time; trong khi đây là busy với một dài chunk of hoạt động, điều này không thể react để một nhấp, một tap, hoặc một keypress. TBT quantifies cách nhiều of trang của bạn-load window là spent trong đó blocked state.

Hai definitions làm all hoạt động ở đây:

  • MỘT dài task“a task that runs on the main thread for more than 50 milliseconds.” (bản dịch) «một task đó chạy on đó main chuỗi trao đổi cho hơn 50 milliseconds.»
  • Đó blocking portion of một task là của nó duration minus 50 ms. Tasks tại hoặc dưới 50 ms contribute chính xác 0 ms.

TBT là sum của những điều đó blocking portions giữa FCPTime để Interactive (TTI). So đầu tiên Contentful Paint là bắt đầu line: không có gì trước khi đầu tiên paint được tính, vì có không có gì on screen để interact với tuy vậy.

Evidence for this claim TBT sums the portion above 50 milliseconds of long main-thread tasks between FCP and Time to Interactive. Scope: Lighthouse lab metric definition; not a field Core Web Vital. Confidence: high · Verified: Chrome Developers: Total Blocking Time

worked ví dụ

Google own bảng là clearest illustration. Imagine five tasks chạy on main chuỗi trao đổi giữa FCP và TTI:

Task durationBlocking time (duration − 50 ms)
Task một: 250 ms200 ms
Task hai: 90 ms40 ms
Task three: 35 ms0 ms
Task four: 30 ms0 ms
Task five: 155 ms105 ms
Total Blocking Time345 ms

Tasks three và four là dưới đó 50 ms line, so they contribute không có gì. Task một chặn cho 250 − 50 = 200 ms, task five cho 155 − 50 = 105 ms. Thêm đó blocking portions — 200 + 40 + 0 + 0 + 105 — và bạn nhận 345 ms of TBT. đó là một “needs improvement” (bản dịch) «cần improvement» score, driven gần như hoàn toàn by hai nặng tasks.

Này là đó counter-intuitive part worth internalizing: “A small number of tasks on the main thread doesn’t necessarily mean low blocking time. Conversely, a large number of tasks doesn’t necessarily lead to tons of blocking time.” (bản dịch) «MỘT nhỏ number of tasks on đó main chuỗi trao đổi không nhất thiết có nghĩa là thấp blocking time. Conversely, một lớn number of tasks không nhất thiết lead để tons of blocking time.» (Đó cách diễn đạt là NitroPack, relayed ở đây — reverified so với đó trực tiếp nguồn 2026-07-18.) Điều gì matters là liệu riêng lẻ tasks cross 50 ms, không cách nhiều tasks có.

việc đo lường window: FCP để TTI

Đó window ends tại Time để Interactive“the time from when the page starts loading to when its main sub-resources have loaded and it is capable of reliably responding to user input quickly.” (bản dịch) «đó time từ khi đó trang bắt đầu loading để khi của nó main sub-các tài nguyên có loaded và điều này là capable of reliably responding để người dùng input quickly.» Trong Lighthouse, TTI là được tìm thấy by searching forward cho một five-second “quiet window” (bản dịch) «yên lặng window» với không dài tasks và không hơn hai trong-flight network các yêu cầu.

Worth noting: TTI itself đã là đã xóa từ Lighthouse 10 vì điều này proved overly sensitive để outlier network các yêu cầu và dài tasks, producing cao variability. TBT survived và trở thành đó chính interactivity chỉ số. As Philip Walton put điều này, “Newer, alternative, metrics like Largest Contentful Paint (LCP), Total Blocking Time (TBT), and Interaction to Next Paint (INP) are usually better metrics to use in place of TTI.” (bản dịch) «Newer, alternative, các chỉ số như Largest Contentful Paint (LCP), Total Blocking Time (TBT), và Interaction để Tiếp theo Paint (INP) là thường tốt hơn các chỉ số để dùng trong place of TTI.» TBT đã không replace TTI as đó window endpoint — đây là một tốt hơn single number cho đó giống nhau underlying vấn đề. Và TTI disappearance từ đó Lighthouse báo cáo UI không đó giống nhau claim as TTI không lâu hơn bounding Lighthouse default navigation window — đó window itself là vẫn measured đó way dưới đó hood.

Evidence for this claim TTI being removed as a displayed Lighthouse metric does not by itself mean TTI stopped bounding the default Lighthouse navigation TBT window. Scope: lab recommended Confidence: high · Verified: Total Blocking Time (TBT)

Một nhiều hơn scoping note: “FCP để TTI” mô tả Lighthouse default navigation audit cụ thể. khác tools, hoặc Lighthouse itself đang chạy timespan trace thay vì đầy đủ trang-load navigation, có thể total khác measured window — 50 ms dài-task math không thay đổi, nhưng bắt đầu và end points của Điều gì nhận summed là tool- và trace-chế độ-cụ thể, không universal law của chỉ số.

Evidence for this claim 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. Scope: navigation audits Confidence: high · Verified: Total Blocking Time

là TBT Cốt lõi Web Vital? Không.

Này là đó hầu hết phổ biến misconception, so let là blunt về điều này. Đó three Cốt lõi Web Chỉ số quan trọng là LCP, INP, và CLS. TBT không phải một of them. Google own wording: “Total Blocking Time (TBT) is a lab metrics is vital in catching and diagnosing potential interactivity issues that can impact INP. However, it is not part of the Core Web Vitals set because they are not field-measurable, nor do they reflect a user-centric outcome.” (bản dịch) «Total Blocking Time (TBT) là một lab các chỉ số là vital trong catching và diagnosing potential interactivity các vấn đề đó có thể impact INP. Tuy nhiên, điều này không phải part of đó Core Web Vitals set vì they không phải trường-measurable, nor làm they reflect một người dùng-centric outcome.» (Đó grammar trong đó sentence là theirs, không mine.)

So nơi làm TBT hiển thị lên, và nơi không nó?

  • nơi bạn see nó: Lighthouse, PageSpeed Insights’ lab tab, và Chrome DevTools — all simulated/lab environments.
  • nơi bạn không: Google Search Console’s Core Web Vitals báo cáo, CrUX, hoặc bất kỳ trường dữ liệu. những điều đó chỉ carry LCP, INP, và CLS.

Nếu ai đó tells bạn họ là “watching TBT in Search Console,” (bản dịch) «watching TBT trong Search Console,» họ là mistaken — GSC các báo cáo trường dữ liệu, và TBT không một trường chỉ số.

Một correction worth đang precise về: TBT đang lab-được khuyến nghị không đó giống nhau as TBT đang trường-không thể. Bạn có thể technically compute một TBT-style total trong đó trường với đó Dài Tasks API — Google says so trực tiếp: “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.” (bản dịch) «Điều này là có thể để đo lường TBT trong đó trường, nhưng we không khuyến nghị này as người dùng interaction có thể ảnh hưởng trang của bạn TBT trong ways đó lead để lots of variance trong của bạn các báo cáo.» đó là một khuyến nghị so với điều này, không một kỹ thuật wall. điều gì là thực ra đúng không có exception là hẹp hơn: CrUX và Search Console’s Core Web Vitals báo cáo không bao giờ carry TBT, đầy đủ dừng — những pipelines chỉ bao giờ collect LCP, INP, và CLS.

TBT là lab proxy cho INP

Ở đây vì sao TBT tồn tại all. Lab tools load một trang trong một simulated environment với không real người dùng, so they không thể đo lường Interaction để Tiếp theo Paint — INP cần thực tế clicks và taps. TBT fills đó khoảng trống: “the Total Blocking Time (TBT) metric is lab-measurable and is a proxy for INP.” (bản dịch) «đó Total Blocking Time (TBT) chỉ số là lab-measurable và là một proxy cho INP.»

Đó hai là mechanically related: “Although INP and TBT are calculated differently, they are both reflections of a blocked main thread during the bootstrap process. When the main thread is blocked, the browser is delayed in responding to user interactions.” (bản dịch) «Although INP và TBT là calculated differently, they là cả hai reflections of một blocked main chuỗi trao đổi during đó bootstrap xử lý. Khi đó main chuỗi trao đổi là blocked, đó trình duyệt là delayed trong responding để người dùng interactions.» Và empirically, “A low TBT often correlates with a low Interaction to Next Paint (INP).” (bản dịch) «MỘT thấp TBT thường correlates với một thấp Interaction để Tiếp theo Paint (INP).»

Nhưng “proxy” không phải “substitute.” Google là rõ ràng: “Total Blocking Time (TBT) may be a reasonable proxy metric for INP, but it’s not a substitute for INP in and of itself.” (bản dịch) «Total Blocking Time (TBT) có thể là một reasonable proxy chỉ số cho INP, nhưng đây là không một substitute cho INP trong và of itself.» They diverge trong real ways:

  • Cao TBT, fine INP. TBT measures blocking during load. nếu của bạn người dùng không thực ra try để interact during đó blocked window — họ chờ cho trang để look finished đầu tiên — của họ INP có thể là fine ngay cả với ugly TBT.
  • Fine TBT, poor INP. INP cũng covers chậm event handlers và kết xuất hoạt động đó fire sau khi load, plus điều như trình duyệt 300 ms tap delay on non-mobile-optimized các trang — none của mà TBT sees.

Khi lab và trường disagree, trust trường. INP ( thực-người dùng number) takes priority over TBT ( lab estimate).

Một lịch sử note đó trips mọi người lên: TBT được sử dụng để là lab proxy cho đầu tiên Input Delay (FID). INP replaced FID as Cốt lõi Web Vital vào ngày 12 tháng 3 năm 2024, so TBT là hiện tại INP proxy. underlying mechanism không bao giờ changed — nó luôn là về blocked main chuỗi trao đổi during load — nhưng bất kỳ older bài viết calling TBT “FID proxy” có trước đó chuyển.

Vì sao TBT dominates Lighthouse score

TBT carries largest single weight trong Lighthouse Performance score — 30%, weighting introduced trong Lighthouse 10 và, verified trực tiếp so với Chrome scoring tài liệu on 2026-07-18, vẫn unchanged qua hiện tại Lighthouse 13:

Chỉ sốWeight
đầu tiên Contentful Paint10%
Speed chỉ mục10%
Largest Contentful Paint25%
Total Blocking Time30%
Cumulative Layout Shift25%

Treat đó bảng as version-và-date-scoped, không vĩnh viễn constant — Lighthouse có changed của nó weights trước khi và có thể again. Re-verify so với Lighthouse performance scoring trước khi quoting nó trong audit deck.

Đây là practical reason TBT matters Đối với SEO audits mặc dù nó không phải tín hiệu xếp hạng: poor TBT có outsized effect on đó big Lighthouse number mọi người screenshots. Addy Osmani worked ví dụ làm nó concrete — removing một Intersection Observer polyfill cut TBT từ 400 ms để 300 ms và lifted Lighthouse Performance score từ 63 để 70. Một khắc phục, seven points, vì của 30% weight.

Một hơn nuance: đó “Good ≤200 ms” (bản dịch) «Good ≤200 ms» category ngưỡng và đó Lighthouse score là khác nhau scales. Để score 90+ on đó TBT subscore bạn cần khoảng ≤300 ms on mobile, và để hit 100 bạn cần ≤100 ms. (Những subscore figures là DebugBear tài liệu of đó scoring curve, reverified so với đó trực tiếp nguồn 2026-07-18.) “Good” và “100” không phải đó giống nhau bar.

Làm TBT ảnh hưởng SEO thứ hạng?

không trực tiếp — và I’ll là straighter về điều này hơn phần lớn.

TBT không phải tín hiệu xếp hạng. Google interactivity xếp hạng input là INP, trường chỉ số. TBT là diagnostic đó helps bạn tìm và khắc phục dài tasks đó hurt INP. Improving TBT có thể improve INP, mà có thể marginally help trang Experience side của thứ hạng — nhưng đó hai links của “có thể” away từ của bạn positions.

và ở đây my thực tế position on toàn bộ Core Web Vitals câu hỏi, mà I’ve được viết trước khi trong my trang speed hướng dẫn: I không think Core Web Vitals có nhiều impact on SEO, và trừ khi bạn’re extremely chậm I generally sẽ không prioritize them. Làm them cho người dùng và conversions, không cho xếp hạng bump. đó áp dụng doubly để TBT, mà là lab proxy cho trường chỉ số cho nhỏ xếp hạng input. khắc phục nó vì frozen trang loses bạn customers — không vì bạn’re chasing position.

Điều gì gây ra cao TBT

nó gần như luôn JavaScript:

  • Unnecessary JavaScript loading, phân tích cú pháp, hoặc execution — Lighthouse audit own words. Shipping big bundle trang không cần tại load là kinh điển nguyên nhân.
  • Inefficient JavaScript statements — nặng synchronous hoạt động đó monopolizes main chuỗi trao đổi.
  • thứ ba-party scripts — tag managers, chat widgets, phân tích, quảng cáo scripts. thường single biggest contributor, và một bạn control least.
  • Nặng framework bootstrap — React hydration và similar có thể chạy dài tasks during startup.
  • Style/layout recalculation và garbage collection — forced synchronous layout, lớn style recalcs, và GC pauses hiển thị lên as main-chuỗi trao đổi tasks cũng; không assume mỗi dài task trong trace là JavaScript execution.

không assume bundle transfer size là toàn bộ story, either. Trace attribution có thực gaps: cross-origin frames và worker threads có quyền riêng tư và security limits on Điều gì dài-task observer có thể báo cáo về them (see Khắc phục sự cố), so unattributed task trong của bạn trace không phải proof không thứ ba party là involved — nó có thể chỉ có nghĩa là attribution API không phải được phép để tell bạn.

Cách khắc phục cao TBT

các cách sửa là giống nhau family as INP các cách sửa — cả hai come xuống để blocked main chuỗi trao đổi.

  1. Tìm đó dài tasks. Open đó Chrome DevTools Performance panel và tìm tasks over 50 ms (họ là flagged với red corners), hoặc chạy đó Lighthouse “Avoid long main-thread tasks” (bản dịch) «Tránh dài main-chuỗi trao đổi tasks» audit.
  2. Audit bên thứ ba scripts đầu tiên. họ là thường đó easiest wins. Dùng đó DevTools Coverage và Network tabs để see điều gì mỗi script costs, và lazy-load nặng embeds (YouTube, maps, chat) behind một facade.
  3. Break lên đó dài tasks. Yield để đó main chuỗi trao đổi so đó trình duyệt có thể xử lý input giữa chunks — “when tasks are broken up, the browser can respond to higher-priority work much sooner—including user interactions.” (bản dịch) «khi tasks là hỏng lên, đó trình duyệt có thể respond để cao hơn-priority hoạt động nhiều sooner—including người dùng interactions.» Đó modern API là scheduler.yield(), với một setTimeout(resolve, 0) fallback (see đó Cheat Sheets tab cho đó pattern). Note đó Google không lâu hơn khuyến nghị isInputPending() — yield regardless of liệu input là pending.
  4. Reduce đó JavaScript. Code-split lớn bundles so ít hơn parses và evaluates tại load, xóa unused JS (DevTools Coverage tab cho thấy bạn điều gì), và defer non-cốt yếu scripts.
  5. Move nặng computation off đó main chuỗi trao đổi. Web Workers chạy CPU-nặng hoạt động on một tách biệt chuỗi trao đổi, leaving đó main chuỗi trao đổi free để respond.

hữu ích side effect: dài tasks đó block main chuỗi trao đổi có thể cũng delay Largest Contentful Paint kết xuất, so sửa TBT đôi khi improves LCP cũng — especially Khi render-blocking JS là involved.

nơi để go tiếp theo

TBT lives trong Core Web Vitals family alongside của nó trường đối tác tương ứng Interaction để tiếp theo Paint, loading các chỉ số Largest Contentful Paintđầu tiên Contentful Paint, và lab tools Lighthouse, PageSpeed Insights, và Speed chỉ mục đó báo cáo them. nếu bạn chỉ remember một điều: TBT là lab warning light cho trường responsiveness — chase dài tasks, không number.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.