디바운스(Debounce)와 스로틀(Throttle)이란

둘 다 Dom이벤트의 실행을 제어하는 방법이다.
예를 들어 resize, scroll 를 했을때 어떤 이벤트가 실행한다고 했을 이벤트 수행에 제약을 걸어 보다 적은 이벤트가 실행되도록 한다.

사용되는예

  • 검색어 작성하는 중간중간 서버에 데이터를 요청할때
    (검색기능 이용 시 작성하는 검색어에 따라 추천 검색어를 띄워줄 때 타자치는 모든 순간에 요청을 보내는건 비효율적이다.)
  • 무한스크롤 (스크롤 위치를 측정 후 api 호출)
  • 앱에서 요소를 드래그 할때 성능을 높이기 위해서


디바운스(Debounce)

디바운스는 이벤트를 방생 시키는 동안에는 발생하는 이벤트를 무시하다가 정해둔 일정시간이 지나면 마지막에 발생한 이벤트 하나만 발생시키도록하는 기술이다.

  • 예) 사용자가 텍스트를 입력 하다가 사용자가 입력을 멈추면 마지막에 발생한 이벤트 하나만 실행시킨다.


// ✨ debounce (실행시킬 함수, delay 시간)

const debounce = (callback, delay = 1000) => {
  let timer;
  return () => {
    setHandleLoading(true);
    // 실행 함수 setTime out 취소
    clearTimeout(timer);

    //delay만큼 시간이 지나면  callback 함수 실행
    timer = setTimeout(() => {
      return callback();
    }, delay);
  };
};




스로틀(Throttle)

스로틀은 일정 주기마다 이벤트를 발생시킨다. 마지막 함수 실행 후 일정 시간이 지나야만 호출이되는 기술이다.

  • 예) 무한 스크롤을 구현할때


// ✨ throttle
// throttle(실행시킬 함수, delay시간)
const throttle = (callback, delay = 400) => {
  let timer = null;
  return (e) => {
    if (timer === null) {
      timer = setTimeout(() => {
        callback(e);
        timer = null;
      }, delay);
    }
  };
};





< Refer to >
https://webclub.tistory.com/607

Leave a comment