Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- code .
- sealize
- Ionic
- IONIC3
- Visual Studio Code
- php
- JavaScript
- 이미지바꾸기
- rxjs
- fromEvent
- NVM
- change detection
- Sentry
- 자바스크립개념
- ion-range
- 변화감지
- aab 배포
- error
- angular5
- getElementsByClassName
- 테두리굵기
- Git
- zsh
- hashchange
- VSCode
- ChangeDetectorRef
- oh-my-zsh
- border-width
- angular
- typescript
Archives
- Today
- Total
hsunny study blog
EventTarget.addEventListener()의 Passive 옵션 알아보기 본문
EventTarget.addEventListener()의 옵션 중 하나로 passive가 지원된다.
passive를 true로 설정함으로써 스크롤 성능을 향상시킬 수 있다.
// Chrome 49 부터 EventListenerOptions 지원
document.addEventListener("touchstart", handler, {
capture: false, // Chrome 49
once: false, // Chrome 55
passive: false // Chrome 51
});
어떻게 향상하는걸까?
스크롤 할때 발생하는 터치 이벤트들이 브라우저에서 발생하면, 브라우저는 터치 이벤트 수신기가 스크롤을 취소할지 여부를 알 수 없으므로 항상 수신기가 끝날 때까지 기다렸다가 페이지를 스크롤한다.
passive 옵션을 사용함으로써, 브라우저에게 스크롤을 기다리지 않고 즉시 스크롤해도 됨을 알리는거다.
자세히 알아보기
touchstart, touchmove 핸들러의 결과를 기다릴 필요가 있기 때문에 preventDefault()를 이용하여 부분적으로 무효화한다. 분석 결과에 따르면 웹 상의 터치 이벤트 핸들러 대다수는 실제로 preventDefault()를 호출하지 않으므로 브라우저는 불필요한 스크롤을 차단하는 경우가 있다.
예를 들어, 안드로이드용 크롬에서는 스크롤을 차단하는 터치 이벤트의 80%가 실제로 이를 막지 못한다. 이러한 이벤트의 10%는 스크롤 시작에 100ms 이상의 지연을 추가하며, 스크롤의 1%에서 최소 500ms의 치명적인 지연이 발생한다.
이 문제는 터치 이벤트 뿐만 아니라 휠 이벤트에서도 동일한 문제가 발생한다.
이를 해결하기 위해 passive 옵션을 사용한다.
사용 가능한 버전
- Chrome 51+, Firefox 49+ 부터 세번째 인자를 useCapture 속성을 포함한 객체로 사용할 수 있도록 변경되었다. (이외는 boolean)
Chrome 51+ 업데이트사항 보러가기 - https://developers.google.com/web/updates/2016/06/passive-event-listeners - passive 옵션을 권장하는 경우, 콘솔에 경고로 뜬다.
Handling of 'touchstart' input event was delayed for X ms due to main thread being busy. Consider marking event handler as 'passive' to make the page more responsive.
참고사이트
https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
https://developer.mozilla.org/ko/docs/Web/API/EventTarget/addEventListener
'programming > javascript' 카테고리의 다른 글
InputEvent 알아보기 (0) | 2023.02.03 |
---|---|
브라우저의 기본 동작 막기 (0) | 2023.01.15 |
타입스크립트 잘 사용하기 (0) | 2021.09.07 |
스코프 (Scope, 유효범위) (0) | 2021.09.04 |
예외처리 (0) | 2021.04.08 |