# Throttle & Debounce

토이 프로젝트를 진행하며 이용하게된 Infinite scroll(무한 스크롤)에서 Throttle과 Debounce를 사용하게 되면서 해당 내용을 정리합니다.

# Throttle, Debounce를 사용하는 이유

Javascript에서 Dom Event를 사용하면, 반복된 DOM event가 발생하며, 해당 이벤트 콜백이 매우 빈번히 실행될 가능성이 높아진다. 때문에, 이벤트에 따른 콜백 요청을 원하는 시기에 적절히 할 수 있도록 조치를 취해야 한다. 이 때, Throttle과 Debounce를 이용할 수 있다.

# Throttle

throttle은 반복된 요청해서 일정 시간 이후의 요청만 처리하는 방식이다. 예를 들어 마우스 이벤트를 통해 콜백을 실행하며 3초에 한번만 실행하는 방식으로 설정해주는 방식은 Throttle을 이용하여 구현 할 수 있다.

# js 구현

function Throttle(callback, time = 1000) {
  let isWaiting = true;

  return () => {
    if (isWaiting) {
      callback();
      isWaiting = false;
      setTimeout(() => {
        isWating = true;
      }, time);
    }
  };
}

# Debounce

debounce는 지속적으로 발생하는 event callback을 일괄적으로 처리하는 방식 중 하나로, 모든 요청이 종료된 이후에 한번만 처리하는 방식을 사용한다. Throttle과 다르게 주기적인 요청을 하지 않으며, Event가 종료되면 처리하게 된다.

# js 구현

function Debounce(callback, time = 1000) {
  let timeout;
  return () => {
    clearTimeout(timeout);
    timeout = setTimeout(() => {
      callback();
    }, time);
  };
}