디바운싱
과 쓰로틀링
은 검색 기능에서 많이 쓰인다고만 알고 있었다.
그래서 이번 프로젝트에서 검색 미리보기를 보여줘야하는 기능을 구현해야할 때, 바로 찾아서 사용할 수 있었다.
하지만, 정확히 디바운싱
이 무엇이고, 쓰로틀링
이 무엇인지, 둘의 차이 점이 무엇인지는 알지 못했다. 따라서 이번 기회를 통해서 제대로 공부하고 추후에도 잘 활용할 수 있었으면 해서 정리해보았다.
이전에 요청을 취소하고 가장 최근의 요청만 받아들여짐
즉, 연속된 요청을 보내면 가장 마지막에 보낸 요청만 보내짐
function debouncing(func, timeout = 200) {
clearTimeout(timerId);
timerId = setTimeout(func, timeout);
}
clearTimeout
)clearTimeout
)func
) 실행됨예를 들어서, "intersoom"을 검색해야하는 상황이라면, i
, n
, t
, e
, r
, s
, o
, o
, m
각 글자를 입력할 때마다 서버에 API 요청을 한다면, 서버 자원에 큰 부담을 줄 것이다.
이가 필요한 요청일까 생각해봤을 때, 그렇지 않다. 연속적으로 요청하는거라면, 마지막 요청만 실행되어도 사용자가 원하는 결과물은 받을 수 있다.
위와 같이 연달아서 발생하는 이벤트를 한 번에 이벤트로 만들 수 있고 이가 유리한 곳에서 쓰인다.
따라서 디바운싱을 사용하는 것이다.
마지막에 함수가 호출되고 설정한 시간만큼은 다른 함수를 호출하지 않는 것
즉, 가장 먼저 보낸 요청만 실행되고 설정 시간만큼 동안 보낸 요청은 무시됨
function throttling(func, timeout = 200) {
if (timerId) {
return;
}
timerId = setTimeout(() => {
func();
timerId = undefined;
}, timeout);
}
timerId
를 등록해두고 특정 시간 동안 다른 요청 받지 않음매우 짧은 주기에 발생하는 반복적인 요청을 다 받아서 처리하려면, 리소스가 너무 많이 들 것이다.
그런데, 이를 쓰로팅을 사용한다면, 요청을 특정한 주기로 처리할 수 있게 된다.
반복적인 요청의 대표적인 예시로는 마우스 이벤트가 있다.
이로 예를 들어서 설명해보겠다. 아무 처리하지 않은 상태에서 스크롤을 한 번에 쭉 내렸다고 하면,
스크롤 위치가 바뀔 때마다 요청이 가면서 매우 짧은 시간에 굉장히 여러 번의 요청이 발생할 것이다.
이는 비효율적이다.
쓰로트링을 활용해서 스크롤 위치를 설정한 주기에 따라서 요청을 처리하면, 훨씬 효율적일 것이다.
따라서 쓰로틀링을 사용하는 것이다.
이번 프로젝트에서 디바운싱을 사용해볼 수 있는 좋은 기회였다!
조만간 쓰로틀링도 사용해볼 기회가 생겼으면 좋겠다.
https://onlydev.tistory.com/151
https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EB%94%94%EB%B0%94%EC%9A%B4%EC%8B%B1%EA%B3%BC-%EC%93%B0%EB%A1%9C%ED%8B%80%EB%A7%81-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-e02f6bb14627