TBT削減 — Total Blocking Time最適化ガイド

Total Blocking Time (TBT) を200ms以下に削減します。長いタスクの特定、JavaScript実行の分割、コード分割、サードパーティスクリプトの最適化を学びます。

Supplementary Metrics

詳細な説明

Total Blocking Time (TBT) の削減

TBTは、FCPからTime to Interactive (TTI) までの間に、メインスレッドが「長いタスク」によってブロックされた合計時間を測定します。長いタスクとは50msを超えるタスクです。ブロッキング時間は50msを超えた部分です。

TBTの計算方法

タスク時間: 250ms → ブロッキング時間: 200ms (250 - 50)
タスク時間: 30ms  → ブロッキング時間: 0ms (閾値以下)
タスク時間: 80ms  → ブロッキング時間: 30ms (80 - 50)

TBT = すべてのブロッキング時間の合計 = 200 + 0 + 30 = 230ms

TBT閾値

評価
良好 ≤ 200ms
要改善 ≤ 600ms
不良 > 600ms

INPのラボ代替指標としてのTBT

TBTはラボ指標(Lighthouseなどの制御環境で測定)であり、INPはフィールド指標です。ただしTBTはINPと強い相関があり、TBTの最適化は一般的にINPを改善します。

最適化戦略

コード分割:

// 動的インポートに分割
const heavyModule = await import('./heavy');

長いタスクの分割:

async function processAll(items) {
  const CHUNK_SIZE = 10;
  for (let i = 0; i < items.length; i += CHUNK_SIZE) {
    const chunk = items.slice(i, i + CHUNK_SIZE);
    chunk.forEach(item => expensiveOperation(item));
    await new Promise(r => setTimeout(r, 0)); // 譲渡
  }
}

ツリーシェイキング: 未使用のエクスポートをバンドラーが除去することを確認します。

ユースケース

TBT削減は、JavaScript重視のアプリケーション — React、Angular、Vueで構築されたSPA、複雑な初期化を持つダッシュボードアプリケーション、複数のサードパーティスクリプトを読み込むページ — に不可欠です。LighthouseはTBTを重要なスコアリング要因として使用します。

試してみる — Web Vitals Reference

フルツールを開く