본문 바로가기
IT

Web - Passive Event Listener() aka addEventListener()

by 내일은교양왕 2023. 7. 2.

개념

Touch, Wheel 이벤트 리스너는 사용자 액션을 추척하면서 다양한 scrolling 경험을 주기위해 유용한 함수입니다. 하지만 이 함수들은 사용자가 스크롤링 시 버벅이는 현상을 초래할 수 있다. 이유는 현 브라우저는 해당 이벤트 리스너가 scrolling을 방해하는지 알 수 없기 때문에, scrolling 되기 전에 callback 함수 내의 모든 코드가 실행 될 때 까지 항상 기다려야 하기 때문인데요. passive를 설정하면, 기다리지 않고 바로 scrolling해서 해결 할 수 있습니다. 즉, passive 설정한다는 의미는 preventDefault() 함수를 사용하지 않았으니 기다릴 필요 없다고 브라우저에게 알려준다고 보면 될거 같습니다.

 

특징

 - passive: true인데 preventDefault()를 호출할 경우 브라우저 console.error가 노출됩니다. callback안에 함수는 실행되는거 같지만, side effect가 우려되네요.. 다양하게 테스트를 하지 않해보았습니다.

 - 몇몇 브라우저는 wheel, mousewheel, touchstart, touchmove 이벤트일 경우 passive의 기본값을 true로 바꾸어 실행합니다. 

https://caniuse.com/?search=passive

브라우저 지원 여부

https://caniuse.com/?search=passive

코드

addEventListener('touchmove', callback, {passive: true})

 

 

passive: true 설정 여부에 따른 성능비교 영상

https://www.youtube.com/watch?v=65VMej8n23A