Panduan Total Blocking Time (TBT)

What TBT measures, 50ms panjang-task math, why ini adalah lab proxy untuk INP (not sebuah Core Web Vital), dan cara fix sebuah red score — dari sebuah SEO teknis.

Pertama kali diterbitkan: 26 Jun 2026 · Terakhir diperbarui: 3 Agu 2026 · Advanced
Bahasa

Total Blocking Time (TBT) adalah sum dari blocking portion — time above 50 ms — dari setiap panjang task antara pertama Contentful Paint dan Time untuk Interactive. ini adalah sebuah lab-hanya metric, single largest weight (30%) di Lighthouse performa score, dan lab proxy untuk Core Web Vital INP (ini digunakan untuk proxy FID). ini adalah NOT sebuah Core Web Vital dan tidak pernah menampilkan up di Search Console atau CrUX. Lighthouse mobile thresholds: baik ≤200 ms, poor >600 ms. Anda fix ini yang sama cara Anda fix INP — break up panjang JS tasks, code-split, defer atau hapus unused JS, dan cut ketiga-party script cost. My honest take: melakukan ini untuk pengguna dan conversions, not untuk sebuah peringkat bump.

TL;DR — TBT adalah total amount dari time, antara pertama Contentful Paint dan Time untuk Interactive, itu main thread adalah blocked panjang enough untuk mencegah input responsiveness. ini sums blocking portion (duration − 50 ms) dari setiap panjang task (apa pun main-thread task di atas 50 ms). ini adalah sebuah lab metric — single largest weight (30%) di Lighthouse 10 score dan lab proxy untuk INP — tetapi ini adalah not sebuah Core Web Vital dan tidak pernah appears di CrUX atau Search Console. Mobile thresholds: baik ≤200 ms, poor >600 ms. Fix ini like Anda’d fix INP: break up panjang JS tasks, code-split, defer/hapus unused JS, tame ketiga-party scripts. My honest take: fix ini untuk pengguna, not untuk sebuah peringkat 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

What TBT actually measures

Google’s definition adalah place untuk start. TBT adalah “the total amount of time after First Contentful Paint (FCP) where the main thread was blocked for long enough to prevent input responsiveness.” (terjemahan) “ total amount dari time setelah pertama Contentful Paint (FCP) where main thread adalah blocked untuk panjang enough untuk mencegah input responsiveness.” browser’s main thread processes one task di sebuah time; while ini adalah busy dengan sebuah panjang chunk dari berfungsi, ini dapat’t react untuk sebuah click, sebuah tap, atau sebuah keypress. TBT quantifies how much dari Anda halaman-muat window adalah spent di itu blocked state.

Two definitions melakukan semua berfungsi here:

  • sebuah panjang task adalah “a task that runs on the main thread for more than 50 milliseconds.” (terjemahan) “sebuah task itu runs pada main thread untuk more daripada 50 milliseconds.”
  • blocking portion dari sebuah task adalah -nya duration minus 50 ms. Tasks di atau di bawah 50 ms contribute exactly 0 ms.

TBT adalah sum dari itu blocking portions antara FCP dan Time untuk Interactive (TTI). So pertama Contentful Paint adalah start line: nothing sebelum pertama paint counts, because there’s nothing pada screen untuk interact dengan yet.

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 contoh

Google’s own table adalah clearest illustration. Imagine five tasks run pada main thread antara FCP dan TTI:

Task durationBlocking time (duration − 50 ms)
Task one: 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 Time345 ms

Tasks three dan four adalah di bawah 50 ms line, so mereka contribute nothing. Task one blocks untuk 250 − 50 = 200 ms, task five untuk 155 − 50 = 105 ms. tambahkan blocking portions — 200 + 40 + 0 + 0 + 105 — dan Anda get 345 ms dari TBT. itu’s sebuah “needs improvement” (terjemahan) “perlu improvement” score, driven almost entirely oleh two heavy tasks.

ini adalah counter-intuitive bagian 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.” (terjemahan) “sebuah kecil angka dari tasks pada main thread doesn’t necessarily berarti rendah blocking time. Conversely, sebuah besar angka dari tasks doesn’t necessarily lead untuk tons dari blocking time.” (itu framing adalah NitroPack’s, relayed here — reverified terhadap live source 2026-07-18.) What penting adalah whether individual tasks cross 50 ms, not how banyak tasks ada.

pengukuran window: FCP untuk TTI

window ends di Time untuk 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.” (terjemahan) “ time dari when halaman starts memuat untuk when -nya main sub-resources memiliki dimuat dan ini adalah capable dari reliably responding untuk pengguna input quickly.” di Lighthouse, TTI adalah ditemukan oleh searching forward untuk sebuah five-kedua “quiet window” (terjemahan) “quiet window” dengan no panjang tasks dan no more daripada two di-flight network permintaan.

Worth noting: TTI itself adalah dihapus dari Lighthouse 10 because ini proved overly sensitive untuk outlier network permintaan dan panjang tasks, producing tinggi variability. TBT survived dan became primary interactivity metric. sebagai Philip Walton put ini, “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.” (terjemahan) “Newer, alternative, metrics like Largest Contentful Paint (LCP), Total Blocking Time (TBT), dan Interaction untuk Next Paint (INP) adalah biasanya better metrics untuk gunakan di place dari TTI.” TBT didn’t replace TTI sebagai window’s endpoint — ini adalah sebuah better single angka untuk yang sama underlying masalah. dan TTI’s disappearance dari Lighthouse report UI isn’t yang sama claim sebagai TTI no longer bounding Lighthouse’s default navigation window — window itself adalah masih diukur itu cara di bawah 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)

One more scoping note: “FCP to TTI” (terjemahan) “FCP untuk TTI” describes Lighthouse’s default navigation audit specifically. lainnya alat, atau Lighthouse itself running sebuah timespan trace alih-alih sebuah full halaman-muat navigation, dapat total sebuah berbeda diukur window — 50 ms panjang-task math doesn’t perubahan, tetapi start dan end poin dari what gets summed adalah alat- dan trace-mode-spesifik, not sebuah universal law dari metric.

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

adalah TBT sebuah Core Web Vital? No.

ini adalah paling umum misconception, so let’s menjadi blunt tentang ini. three Core Web Vitals adalah LCP, INP, dan CLS. TBT adalah not one dari them. Google’s 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.” (terjemahan) “Total Blocking Time (TBT) adalah sebuah lab metrics adalah vital di catching dan diagnosing potential interactivity issues itu dapat impact INP. However, ini adalah not bagian dari Core Web Vitals set because mereka adalah not field-measurable, nor melakukan mereka reflect sebuah pengguna-centric outcome.” ( grammar di itu kalimat adalah theirs, not mine.)

So where melakukan TBT tampilkan up, dan where doesn’t ini?

  • Where Anda see ini: Lighthouse, PageSpeed Insights’ lab tab, dan Chrome DevTools — semua simulated/lab environments.
  • Where Anda tidak: Google Search Console’s Core Web Vitals report, CrUX, atau apa pun data lapangan. itu hanya carry LCP, INP, dan CLS.

jika someone tells Anda mereka’re “watching TBT in Search Console,” (terjemahan) “watching TBT di Search Console,” mereka’re mistaken — GSC reports data lapangan, dan TBT isn’t sebuah field metric.

One correction worth menjadi precise tentang: TBT menjadi lab-recommended isn’t sama sebagai TBT menjadi field-impossible. Anda dapat technically compute sebuah TBT-style total di lapangan dengan panjang 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.” (terjemahan) “ini adalah mungkin untuk mengukur TBT di lapangan, tetapi kami don’t recommend ini sebagai pengguna interaction dapat affect Anda halaman’s TBT di cara itu lead untuk lots dari variance di Anda reports.” itu’s sebuah recommendation terhadap ini, not sebuah technical wall. What’s actually benar without exception adalah narrower: CrUX dan Search Console’s Core Web Vitals report tidak pernah carry TBT, full stop — itu pipelines hanya ever collect LCP, INP, dan CLS.

TBT adalah lab proxy untuk INP

Here’s why TBT exists di semua. Lab alat muat sebuah halaman di sebuah simulated environment dengan no nyata pengguna, so mereka dapat’t mengukur Interaction untuk Next Paint — INP perlu actual clicks dan taps. TBT fills itu gap: “the Total Blocking Time (TBT) metric is lab-measurable and is a proxy for INP.” (terjemahan) “ Total Blocking Time (TBT) metric adalah lab-measurable dan adalah sebuah proxy untuk INP.”

two adalah 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.” (terjemahan) “Although INP dan TBT adalah calculated differently, mereka adalah both reflections dari sebuah blocked main thread selama bootstrap process. When main thread adalah blocked, browser adalah delayed di responding untuk pengguna interactions.” dan empirically, “A low TBT often correlates with a low Interaction to Next Paint (INP).” (terjemahan) “sebuah rendah TBT sering correlates dengan sebuah rendah Interaction untuk Next Paint (INP).”

tetapi “proxy” (terjemahan) “proxy” adalah not “substitute.” (terjemahan) “substitute.” Google adalah explicit: “Total Blocking Time (TBT) may be a reasonable proxy metric for INP, but it’s not a substitute for INP in and of itself.” (terjemahan) “Total Blocking Time (TBT) dapat menjadi sebuah reasonable proxy metric untuk INP, tetapi ini adalah not sebuah substitute untuk INP di dan dari itself.” mereka diverge di nyata cara:

  • tinggi TBT, fine INP. TBT measures blocking selama muat. jika Anda pengguna don’t actually try untuk interact selama itu blocked window — mereka wait untuk halaman untuk look finished pertama — mereka INP dapat menjadi fine bahkan dengan sebuah ugly TBT.
  • Fine TBT, poor INP. INP juga covers slow event handlers dan rendering berfungsi itu fire setelah muat, plus things like browser’s 300 ms tap delay pada non-mobile-dioptimalkan halaman — none dari which TBT sees.

When lab dan field disagree, trust field. INP ( nyata-pengguna angka) takes priority di atas TBT ( lab estimate).

One historical note itu trips people up: TBT digunakan untuk menjadi lab proxy untuk pertama Input Delay (FID). INP replaced FID sebagai sebuah Core Web Vital pada March 12, 2024, so TBT adalah now INP’s proxy. underlying mechanism tidak pernah changed — ini adalah selalu telah tentang sebuah blocked main thread selama muat — tetapi apa pun older artikel calling TBT “FID’s proxy” (terjemahan) “FID’s proxy” predates itu switch.

Why TBT dominates Lighthouse score

TBT carries largest single weight di Lighthouse performa score — 30%, sebuah weighting introduced di Lighthouse 10 dan, verified live terhadap Chrome’s scoring docs pada 2026-07-18, masih unchanged melalui saat ini Lighthouse 13:

MetricWeight
pertama Contentful Paint10%
Speed indeks10%
Largest Contentful Paint25%
Total Blocking Time30%
Cumulative Layout Shift25%

Treat itu table sebagai versi-dan-date-scoped, not sebuah permanent constant — Lighthouse memiliki changed -nya weights sebelum dan dapat again. Re-verify terhadap Lighthouse performa scoring sebelum quoting ini di sebuah audit deck.

ini adalah practical alasan TBT penting untuk SEO audits bahkan though ini isn’t sebuah sinyal peringkat: sebuah poor TBT memiliki sebuah outsized effect pada itu big Lighthouse angka everyone screenshots. Addy Osmani’s worked contoh membuat ini concrete — menghapus one Intersection Observer polyfill cut TBT dari 400 ms untuk 300 ms dan lifted Lighthouse performa score dari 63 untuk 70. One fix, seven poin, karena 30% weight.

One more nuance: “Good ≤200 ms” (terjemahan) “baik ≤200 ms” category threshold dan Lighthouse score adalah berbeda scales. untuk score 90+ pada TBT subscore Anda perlu roughly ≤300 ms pada mobile, dan untuk hit 100 Anda perlu ≤100 ms. (itu subscore figures adalah DebugBear’s documentation dari scoring curve, reverified terhadap live source 2026-07-18.) “Good” (terjemahan) “baik” dan “100” (terjemahan) “100” adalah not yang sama bar.

melakukan TBT affect SEO rankings?

Not directly — dan I’ll menjadi straighter tentang ini daripada sebagian besar.

TBT adalah not sebuah sinyal peringkat. Google’s interactivity peringkat input adalah INP, sebuah field metric. TBT adalah sebuah diagnostic itu helps Anda temukan dan fix panjang tasks itu hurt INP. Improving TBT dapat meningkatkan INP, which mungkin marginally help halaman Experience side dari rankings — tetapi itu’s two tautan dari “may” (terjemahan) “dapat” away dari Anda positions.

dan here’s my actual position pada whole Core Web Vitals pertanyaan, which I’ve written sebelum di my kecepatan halaman guide: I don’t think Core Web Vitals memiliki much impact pada SEO, dan unless Anda’re extremely slow I umumnya won’t prioritize them. melakukan them untuk pengguna dan conversions, not untuk sebuah peringkat bump. itu applies doubly untuk TBT, which adalah sebuah lab proxy untuk sebuah field metric untuk sebuah kecil peringkat input. Fix ini because sebuah frozen halaman loses Anda customers — not because Anda’re chasing sebuah position.

What causes tinggi TBT

ini adalah almost selalu JavaScript:

  • Unnecessary JavaScript memuat, parsing, atau execution — Lighthouse audit’s own kata. Shipping sebuah big bundle halaman doesn’t perlu di muat adalah classic cause.
  • Inefficient JavaScript statements — heavy synchronous berfungsi itu monopolizes main thread.
  • ketiga-party scripts — tag managers, chat widgets, analytics, ad scripts. sering single biggest contributor, dan one Anda control least.
  • Heavy framework bootstrap — React hydration dan similar dapat run panjang tasks selama startup.
  • Style/layout recalculation dan garbage collection — forced synchronous layout, besar style recalcs, dan GC pauses tampilkan up sebagai main-thread tasks too; don’t assume setiap panjang task di trace adalah JavaScript execution.

Don’t assume bundle transfer size adalah whole story, either. Trace attribution memiliki nyata gaps: cross-origin frames dan worker threads memiliki privacy dan security limits pada what sebuah panjang-task observer dapat report tentang them (see Troubleshooting), so sebuah unattributed task di Anda trace isn’t proof no ketiga party adalah involved — ini dapat hanya berarti attribution API isn’t allowed untuk tell Anda.

cara fix tinggi TBT

fixes adalah yang sama family sebagai INP fixes — both come down untuk sebuah blocked main thread.

  1. temukan panjang tasks. Open Chrome DevTools performa panel dan cari tasks di atas 50 ms (mereka’re flagged dengan red corners), atau run Lighthouse “Avoid long main-thread tasks” (terjemahan) “hindari panjang main-thread tasks” audit.
  2. Audit ketiga-party scripts pertama. mereka’re biasanya easiest wins. gunakan DevTools Coverage dan Network tabs untuk see what setiap script costs, dan lazy-muat heavy embeds (YouTube, maps, chat) behind sebuah facade.
  3. Break up panjang tasks. Yield untuk main thread so browser dapat handle input antara chunks — “when tasks are broken up, the browser can respond to higher-priority work much sooner—including user interactions.” (terjemahan) “when tasks adalah broken up, browser dapat respond untuk higher-priority berfungsi much sooner—including pengguna interactions.” modern API adalah scheduler.yield(), dengan sebuah setTimeout(resolve, 0) fallback (see Cheat Sheets tab untuk pattern). Note itu Google no longer recommends isInputPending() — yield regardless dari whether input adalah pending.
  4. Reduce JavaScript. Code-split besar bundles so less parses dan evaluates di muat, hapus unused JS (DevTools Coverage tab menampilkan Anda what), dan defer non-critical scripts.
  5. Move heavy computation off main thread. Web Workers run CPU-heavy berfungsi pada sebuah separate thread, leaving main thread free untuk respond.

sebuah berguna side effect: panjang tasks itu block main thread dapat juga delay Largest Contentful Paint rendering, so fixing TBT sometimes improves LCP too — terutama when render-blocking JS adalah involved.

Where untuk go next

TBT lives di Core Web Vitals family alongside -nya field counterpart Interaction untuk Next Paint, memuat metrics Largest Contentful Paint dan pertama Contentful Paint, dan lab alat Lighthouse, PageSpeed Insights, dan Speed indeks itu report them. jika Anda hanya remember one thing: TBT adalah lab warning light untuk field responsiveness — chase panjang tasks, not angka.

Add an expert note

Pin an expert quote

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