Total Blocking Time

총 차단 시간

TBT sums the portion of each long main-thread task beyond 50 ms.

···
html
<div class="atlas"><div class="head"><b>TBT · time beyond 50 ms</b><span class="pulse"></span></div><div class="stage"><div class="tbt-row"><span>task A</span><div class="tbt-track"><i></i><b id="tbt-a"></b></div><em id="tbt-a-label">120ms</em></div><div class="tbt-row"><span>task B</span><div class="tbt-track"><i></i><b id="tbt-b"></b></div><em id="tbt-b-label">80ms</em></div><div class="tbt-row"><span>task C</span><div class="tbt-track"><i></i><b id="tbt-c"></b></div><em>35ms</em></div><div class="tbt-total mono">blocked beyond 50ms <strong id="tbt-total">100ms</strong></div></div></div>
css
.atlas{width:min(94vw,720px);height:min(88vh,320px);border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:clamp(10px,2.5vmin,18px);display:flex;flex-direction:column;gap:clamp(7px,2vmin,12px);font:500 clamp(12px,3.2vmin,16px)/1.25 var(--font-sans),sans-serif;color:var(--fg);box-shadow:0 8px 28px rgba(0,0,0,.06)}.head{display:flex;align-items:center;justify-content:space-between;color:var(--accent);letter-spacing:.03em}.pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:blink 1.3s infinite}@keyframes blink{50%{opacity:.2}}.stage{flex:1;min-height:0;position:relative;overflow:hidden}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.muted{color:var(--muted)}.accent{color:var(--accent)}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg)}.tbt-row{display:flex;align-items:center;gap:6px;height:24%;font-size:12px}.tbt-row span{width:44px}.tbt-row em{width:44px;font-style:normal;text-align:right}.tbt-track{flex:1;height:18px;display:flex;background:var(--line);border-radius:4px;overflow:hidden}.tbt-track i{width:28%;background:color-mix(in srgb,var(--accent) 25%,var(--bg))}.tbt-track b{background:var(--accent);transition:width .45s}.tbt-total{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:6px}.tbt-total strong{color:var(--accent)}
js
let split=false;function tick(){split=!split;document.getElementById('tbt-a').style.width=split?'15%':'42%';document.getElementById('tbt-b').style.width=split?'0%':'18%';document.getElementById('tbt-c').style.width='0%';document.getElementById('tbt-a-label').textContent=split?'75ms':'120ms';document.getElementById('tbt-b-label').textContent=split?'45ms':'80ms';document.getElementById('tbt-total').textContent=split?'25ms':'100ms'}tick();setInterval(tick,2200)

TBT is a lab metric summing the time beyond 50 ms for each long task between FCP and Time to Interactive. It does not count every millisecond of those tasks.

In the demo, the pale part is the first 50 ms; only the darker remainder enters the total. Splitting large tasks creates opportunities to handle input.

When to use

Use it to diagnose lab main-thread blocking, then check real responsiveness with INP.

Open as page ↗