수동 이벤트 리스너 란 무엇입니까?


180

진보적 인 웹 앱의 성능을 향상시키기 위해 노력하면서 새로운 기능 Passive Event Listeners을 발견했으며 개념을 이해하기가 어렵습니다.

무엇 Passive Event Listeners과 그것이 우리의 프로젝트에있을 필요는 무엇인가?


답변:


213

수동 이벤트 리스너는 Chrome 51에 포함 된 새로운 웹 표준 기능으로, 스크롤 성능을 크게 향상시킵니다. 크롬 출시 정보.

이를 통해 개발자는 터치 및 휠 이벤트 리스너를 차단하기 위해 스크롤 할 필요가 없어서 스크롤 성능을 향상시킬 수 있습니다.

문제 : 모든 최신 브라우저가 비싼 자바 스크립트가 실행되는 경우에도 원활하게 실행하기 위해 스크롤을 허용하는 기능을 스크롤 스레드,하지만이 최적화가 부분적으로 어떤 결과를 기다릴 필요에 의해 패배 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.

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 사양 , 데모 비디오 , Explainer Doc


1
항상이 코드 줄을 추가해야합니다 (적어도 대부분의 경우).
Altiano Gerung 2016 년

이것은 Mozilla의 js 엔진과 충돌합니다. 이 이벤트 리스너를 연결하기 전에 브라우저를 감지하는 것이 좋습니다
yardpenalty.com

@AltianoGerung 브라우저가 추천 할 때. 콘솔의 정보 또는 경고 탭에 메시지가 표시됩니다.
snowYetis

@ yardpenalty.com 다음 polyfill을 사용하여 브라우저 확인을 피할 수 있습니다. 스크롤링 유스 케이스의 경우 수동 이벤트 리스너를 사용하는 것이 좋습니다. 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.