パッシブ リスナーを使用してスクロールのパフォーマンスを向上させる

タップイベントとホイール イベント リスナーは、ユーザー操作のトラッキングやカスタムのスクロール エクスペリエンスの作成に役立ちますが、ページ スクロールを遅らせることもできます。現在、ブラウザはイベント リスナーがスクロールを妨げるかどうかを把握できないため、常にリスナーの実行が終了するまで待ってからページをスクロールします。パッシブ イベント リスナーでは、イベント リスナーがスクロールを妨げないように指定することで、この問題を解決します。

ブラウザの互換性

ほとんどのブラウザは、パッシブ イベント リスナーをサポートしています。ブラウザの互換性をご覧ください。

Lighthouse のパッシブ イベント リスナーの監査が失敗する仕組み

Lighthouse では、ページのスクロールを遅らせる可能性のあるイベント リスナーに次のようなフラグが設定されています。

Lighthouse の監査で、スクロールのパフォーマンス向上のために、ページでパッシブ イベント リスナーが使用されていないことが確認される

Lighthouse では、以下のプロセスを使用して、スクロールのパフォーマンスに影響を及ぼす可能性があるイベント リスナーを特定します。

  1. ページ上のすべてのイベント リスナーを収集します。
  2. タップ以外のリスナーと wheel 以外のリスナーを除外します。
  3. preventDefault() を呼び出すリスナーを除外します。
  4. ページとは異なるホストのリスナーを除外します。

Lighthouse では、異なるホストのリスナーは除外されます。これらのスクリプトは、おそらくユーザーが制御できないからです。ページのスクロール パフォーマンスを低下させるサードパーティ スクリプトが存在する可能性がありますが、Lighthouse レポートには表示されません。

イベント リスナーをパッシブにしてスクロールのパフォーマンスを向上させる方法

Lighthouse で特定されたすべてのイベント リスナーに passive フラグを追加します。

パッシブ イベント リスナーをサポートするブラウザのみをサポートする場合は、フラグを追加するだけです。例:

document.addEventListener('touchstart', onTouchStart, {passive: true});

パッシブ イベント リスナーに対応していない古いブラウザをサポートしている場合は、機能検出またはポリフィルを使用する必要があります。詳細については、WICG のパッシブ イベント リスナーの説明ドキュメントの特徴検出セクションをご覧ください。

関連情報