プログレッシブWebアプリケーションのパフォーマンスを向上させるために回避しながら、私は新機能Passive Event Listeners
に出会いましたが、その概念を理解するのは難しいと思います。
Passive Event Listeners
とは何ですか?また、私たちのプロジェクトでそれを使用する必要性は何ですか?
パッシブイベントリスナーは、Chrome 51に同梱されている新しいWeb標準であり、スクロールパフォーマンスを大幅に向上させる可能性があります。 Chromeリリースノート
タッチおよびホイールイベントリスナーをブロックするためにスクロールする必要がなくなるため、開発者はより良いスクロールパフォーマンスをオプトインできます。
問題:最近のブラウザはすべて、高価なJavaScriptが実行されている場合でもスクロールを円滑に実行するためのスレッドスクロール機能を備えていますが、この最適化は次の結果を待つ必要性によって部分的に無効になります。イベントに対してpreventDefault()
を呼び出すことによってスクロールを完全に妨げる可能性があるすべてのtouchstart
およびtouchmove
ハンドラ。
解決策:{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
。
addEventListener(document, "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);