Что такое пассивные слушатели событий?
Работая над повышением производительности прогрессивных веб-приложений, я наткнулся на новую функцию Passive Event Listeners
и мне трудно понять концепцию.
Что Passive Event Listeners
и зачем это нужно в наших проектах?
2 ответа
Пассивные прослушиватели событий - это новый веб-стандарт, новая функция, поставляемая в Chrome 51, которая обеспечивает значительное потенциальное повышение производительности прокрутки. Примечания к выпуску Chrome
Это позволяет разработчикам включить лучшую производительность прокрутки, устраняя необходимость в прокрутке для блокировки прослушивателей событий касания и колесика.
Проблема: все современные браузеры имеют функцию многопоточной прокрутки, позволяющую плавно выполнять прокрутку даже при работе дорогого JavaScript, но эта оптимизация частично побеждена необходимостью ждать результатов любого touchstart
а также touchmove
обработчики, которые могут полностью предотвратить прокрутку, вызывая 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
,
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);
Эта ошибка постоянно возникает в проектах React/Preact. Вроде вообще ни на что не влияет. Отключите его, сняв флажок «подробный» на уровнях журнала devTools.