パッシブイベントリスナーとは何ですか?


180

プログレッシブウェブアプリのパフォーマンスを向上させるために作業をしているときに、新しい機能に出会いPassive Event Listeners、コンセプトを理解するのが難しいと感じました。

Passive Event Listeners私たちのプロジェクトにそれを含める必要性は何ですか?


回答:


212

パッシブイベントリスナーは、Chrome 51に同梱されている新しい機能であるWeb標準であり、スクロールパフォーマンスを大幅に向上させる可能性があります。Chromeリリースノート。

開発者は、タッチイベントとホイールイベントリスナーをブロックするためにスクロールする必要をなくすことで、スクロールパフォーマンスを向上させることができます。

問題:すべての最近のブラウザーにはスレッド化されたスクロール機能があり、高価なJavaScriptが実行されている場合でもスクロールをスムーズに実行できますが、この最適化は、touchstarttouchmoveハンドラーの結果を待つ必要があるため一部が無効になり、呼び出しによってスクロールが完全に妨げられる場合があります。preventDefault()イベントで。

解決: {passive: true}

タッチリスナーまたはホイールリスナーをパッシブとしてマークすることにより、開発者はハンドラーがpreventDefaultスクロールを無効にするように呼び出さないことを約束します。This frees the browser up to respond to scrolling immediately without waiting for JavaScript, thus ensuring a reliably smooth scrolling experience for the user

document.addEventListener("touchstart", function(e) {
    console.log(e.defaultPrevented);  // will be false
    e.preventDefault();   // does nothing since the listener is passive
    console.log(e.defaultPrevented);  // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);

DOM SpecDemo VideoExplainer Doc


1
したがって、常にこのコード行を追加する必要があります(少なくともほとんどの場合)。
Altiano Gerung 2016

これにより、Mozillaでjsエンジンがクラッシュします。このイベントリスナーをアタッチする前にブラウザーを検出する方が良い
yardpenalty.com

@AltianoGerungブラウザーが推奨する場合。コンソールの[情報]または[警告]タブにメッセージが表示されます。
snowYetis

@ yardpenalty.com次のポリフィルを使用すると、ブラウザチェックを回避できます。スクロールの使用例では、パッシブイベントリスナーを使用することは大きな利点です。github.com/WICG/EventListenerOptions/blob/gh-pages/...
Vikrant Siwach

@Vikrant Siwach素晴らしいアドバイス。polyfill.jsですべてを管理する場合、ポリフィルは迅速でやや無痛です
yardpenalty.com
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.