🔍 inp.works

INPの問題を解説:遅いインタラクションの原因と直し方

Interaction to Next Paint(INP)は、ページがクリック・タップ・キー入力にどれだけ速く応答するかを測るCore Web Vitalです。INPが200msを超えると遅く感じ、500msを超えると壊れているように感じます。

悪いINPのほぼすべては、いくつかの根本原因のどれかに行き着きます。以下の各ガイドは1つの原因を解説します:見分け方、なぜ起きるか、そしてコード付きで直し方を。

根本原因

重いイベントハンドラー:クリックに500msかかる理由と直し方

実行の長いイベントハンドラーはメインスレッドをブロックし、次の描画を遅らせます。重いハンドラーの見つけ方と、scheduler.yield()やWeb Workerでの分割方法。

レイアウトスラッシング:1フレーム内で繰り返されるリフローと止め方

DOMの読み書きを交互に行うと、ブラウザは1フレーム内で何度もレイアウトを再計算させられます。読み書きをまとめてINPを直す方法。

強制同期レイアウト:DOM書き込み後にジオメトリを読む

DOMを変更した直後にoffsetWidthやgetBoundingClientRectを読むと、ブラウザはJSタスク内でレイアウトを再計算させられます。検出と修正の方法。

メインスレッドのブロック:ハンドラーが動く前から大きなinput delay

メインスレッドが別の長いタスクで忙しいと、クリックはハンドラー開始まで列で待ちます。ブロックしているタスクの見つけ方と分割でINPのinput delayを直す方法。

インタラクションを妨げるサードパーティスクリプト:診断と封じ込め

アナリティクス、広告、チャットウィジェットはメインスレッドで長いタスクを実行しINPを台無しにします。長いタスクをサードパーティに帰属させ、async・defer・workerで封じ込める方法。

Reactの再レンダリング連鎖:1クリックでツリー全体が再レンダリングされるとき

Reactツリーの上位での状態更新は、クリックのたびに数百のコンポーネントを再レンダリングします。レンダリング連鎖の見つけ方と、memo・useCallback・useTransitionでの修正方法。

サイトを無料でスキャン →
Advertise here