[개발 공부]/[자바스크립트]
[자바스크립트] 디바운싱 - 마지막 이벤트만 실행하기
wild keyboardist
2022. 5. 24. 14:20
[자바스크립트] debouncing - 맨 마지막 이벤트만 캐치하기
너무 많은 이벤트가 지속적으로 발생할 시, 과부화를 일으켜 사용자 환경에 버벅거림을 줄 수 있다.
이를 막기위해 동일한 이벤트를 묶어서, 맨 마지막에 발생한 이벤트만 실행되게 만드는 기술이다.
특히 Ajax call 을 동반한 스크롤, 검색창, 버튼클릭 이벤트에 주로 쓰일 수 있겠다. (Ajax 요청을 최소화)
[사용법]
var temp;
document.addEventListener('scroll', function() {
if(temp) {
clearTimeout(temp);
}
temp = setTimeout(function() {
//type your code here
}, 500);
})
[간단원리]
- 이벤트 발생시, 먼저 timeout 이 존재하는지 확인 후, 존재한다면 해당 timeout 을 삭제
- 그 이후 새로운 timeout 을 생성
- timeout 이 실행되지 않고 있는 500ms 동안, event 가 또 발생한다면 직전의 timeout 은 계속 삭제됨
- timeout 내의 코드는 실행되지 않고있다가, 마침내 마지막 이벤트 발생 500ms 후, 실행됨
간단한 예시를 들면,
스크롤을 내리고 있는 동안에는 timeout 이 생성/삭제가 반복될 것이고, (timeout 내부의 코드는 실행안된채로)
스크롤을 멈추면, 500ms 후 timeout 내부의 코드가 실행된다.
[적용예시]
- 검색창 내 추천검색어 Ajax 요청을 검색어 입력을 마친 후에만 할 수 있도록
- 결제버튼 여러번 클릭 시 한번만 Ajax 요청할 수 있도록
- 스크롤을 내려 데이터를 새로 불러올 때 마지막 스크롤 위치에서만 Ajax 요청
디바운싱은 event 를 제어하는 간단하지만 강력한 기술이다.
자매품으로는 event 발생시에 interval 을 주어 이벤트를 제어하는 쓰로틀링이 있다.
https://devinserengeti.tistory.com/30
[자바스크립트] 쓰로틀링 - 이벤트 실행 제어하기
[자바스크립트] throttling - 이벤트 실행횟수 제한 너무 많은 이벤트가 지속적으로 발생할 시, 과부화를 일으켜 사용자 환경에 버벅거림을 줄 수 있다. 이를 막기위해, 하나의 이벤트가 실행되는
devinserengeti.tistory.com