포트폴리오 리뉴얼 작업을 하는도중 휠(wheel)을 이용한 이벤트의 작업을 하게되었는데, 이때 휠로 발생시키는 이벤트는 순간적으로 여러번 작동하기 때문에 중도에 의도치 않은 작업을 발생시키거나 오류 및 버그를 발생시키게 된다.
이때 이벤트 발생빈도를 제어하기위해 방법을 찾던 중 쓰로틀링 및 디바운싱에 대해 학습하고 적용시키는 기회가 되었다.
잦은 이벤트 호출이 일어날 경우에 대해 이벤트 발생빈도를 제어 및 관리
(서버요청, srcoll 이벤트 등에 사용)
let timer; //타이머 변수 설정. 타이머가 설정되어있지 않다면 undefined.
/**--skip---*/
window.addEventListener("wheel", (e) => {
if (timer) {//타이머설정이 되어있다면
clearTimeout(timer);//타이머 해제
}
timer = setTimeout(() => {//타이머 설정
if (e.deltaY > 0) {//작업 내용
window.scrollBy({ top: window.innerHeight, behavior: "smooth" });
} else if (e.deltaY < 0) {
window.scrollBy({ top: -window.innerHeight, behavior: "smooth" });
}
}, 300);//setTimeout 타이머 0.3초 설정.
});
위 코드는 스크롤 이벤트를 예로 작성한 디바운싱 예시이다.
if(timer)
를 만날시, 타이머가 이미 작동중이라면 작동중인 타이머를 clearTimeout(timer)
해제(삭제)한다.let timer; //타이머 변수 설정. 타이머가 설정되어있지 않다면 undefined.
/**--skip---*/
window.addEventListener("wheel", (e) => {
if (!timer) {//타이머설정이 되어있않다면
timer = setTimeout(() => {//타이머 설정
timer=null;//타이머 설정 null
console.log(e.deltaY);//작업내용.
}, 300);
}
});
if (!timer)
, 타이머를 설정한다.setTimeout(()=>{
console.log('hi')// 2. 1000ms 이후에 실행될 코드;
},1000);// 1. 타이머 내부에 작성한 코드가 1000ms 뒤에 실행된다.
몇초 뒤에 실행되었으면 하는 코드를 작성할 때 사용.
쓰로틀링과 디바운싱의 차이