What are passive event listeners?

JavascriptDom EventsEvent ListenerPassive Event-Listeners

Javascript Problem Overview


While working around to boost performance for progressive web apps, I came across a new feature Passive Event Listeners and I find it hard to understand the concept.

What are Passive Event Listeners and what is the need to have it in our projects?

Javascript Solutions


Solution 1 - Javascript

> Passive event listeners are an emerging web standard, new feature > shipped in Chrome 51 that provide a major potential boost to scroll > performance. Chrome Release Notes.

It enables developers to opt-in to better scroll performance by eliminating the need for scrolling to block on touch and wheel event listeners.

Problem: All modern browsers have a threaded scrolling feature to permit scrolling to run smoothly even when expensive JavaScript is running, but this optimization is partially defeated by the need to wait for the results of any touchstart and touchmove handlers, which may prevent the scroll entirely by calling preventDefault() on the event.

Solution: {passive: true}

By marking a touch or wheel listener as passive, the developer is promising the handler won't call preventDefault to disable scrolling. 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 Spec , Demo Video , Explainer Doc

Solution 2 - Javascript

This error comes up with React / Preact projects all the time. It doesn't seem to effect anything at all. Turn it off by unselecting "verbose" in devTools log levels

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVivek Pratap SinghView Question on Stackoverflow
Solution 1 - JavascriptVivek Pratap SinghView Answer on Stackoverflow
Solution 2 - JavascriptschmellView Answer on Stackoverflow