throttle 은 이벤트 핸들링에 관련된 개념으로,
처음 클릭할때 함수를 호출하고,
일정시간동안 호출을 막는 기능을 한다
스크롤 이벤트를 처리 할 때 주로 사용,
비슷한 개념으로 debounce도 있는데,
이건 이벤트가 트리거 되고 일정 시간 이후에 호출이 되는것으로,
둘다 부하를 줄이거나 불필요한 서버 요청을 줄이는데 사용
제가 사용하는 이벤트는 처음 누른 시점이 중요하기 때문에 Throttle 함수를 구현해서 사용 했습니다.
export const throttling = (throttleTimePerMs = 500) => {
let timer: NodeJS.Timer | null = null;
const throttleFunc = (callbackFunc: () => void) => {
if (!timer) {
timer = setTimeout(() => {
timer = null;
}, throttleTimePerMs);
callbackFunc();
}
};
return throttleFunc;
};
const throttleFunc = useMemo(() => throttling(2000), []);
<Btn onPress={() => throttleFunc(() => request1())} />
<Btn onPress={() => throttleFunc(() => request2(data))} />