프로젝트를 진행 중 검색API가 불필요하게 많은 요청을 보내는 것을 확인 후 최적화를 해보고 어떻게 최적화를 할 수 있었는지 확인을 위해 코드를 짜봤다.
텍스트를 칠 때마다 API를 호출하다보니 검색창이 계속 깜빡이고 퍼포먼스 탭에서 성능을 확인한 결과 최적화가 필요할 것 같다.
디바운스를 써보니 마지막으로 호출한 API만
호출한다. 불필요한 API 호출이 줄었다.
퍼포먼스 탭에서의 성능도 좋아졌다.
쓰로틀링을 써보니 API 호출이 주기를 가지고 한번씩만 호출
이 된다. 최적화 전보다 굉장히 준수하다.
const debounceTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);
const handleDebounceChange = (value: string) => {
if (debounceTimeout.current) {
console.log(debounceTimeout.current);
clearTimeout(debounceTimeout.current);
}
debounceTimeout.current = setTimeout(() => {
setSearchData(value);
}, 500);
};
디바운스 순서 정의
const throttleTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);
const handleThrottleChange = (value: string) => {
if (!throttleTimeout.current) {
setSearchData(value);
throttleTimeout.current = setTimeout(() => {
throttleTimeout.current = null;
}, 500);
}
};
쓰로틀링 순서 정의
디바운스와 쓰로틀링 둘 중에 뭐가 더 잘 어울릴지 고민했다.
나 같은 경우는 중간중간 검색 결과를 보여주는 것보다 마지막에 내가 원하는 결과를 보여주는게 좋아보여서 디바운스를 선택해 구현했다.
최적화는 재밌다.