AS-IS
전역변수로 스로틀링할 로직의 key를 설정하도록 구현하였습니다.
스로틀링할 로직이 추가될 때마다 key를 추가해주어야하고 key의 목록을 관리해야하는 불편함이 있습니다.
TO-BE
클로저를 활용해 key 없이 스로틀링 함수를 사용할 수 있도록 리팩토링을 진행하였습니다.
AS-IS: 전역 key 기반
const throttleManager = {};
export const throttle = (key = '', callback = () => {}, delay = 500) => {
if (throttleManager[key]) {
return;
}
callback();
throttleManager[key] = true;
setTimeout(() => {
delete throttleManager[key];
}, delay);
};
TO-BE: 클로저 기반
const throttle = (callback: (...params: any[]) => void, delay = 500) => {
let timeout: ReturnType<typeof setTimeout> | null = null;
return (...params: any[]) => {
if (timeout) {
return;
}
callback(...params);
timeout = setTimeout(() => {
timeout = null;
}, delay);
};
};
AS-IS: 전역 key 기반
장점
- 구현이 단순함
고려할 점
- 전역 객체 오염
- key 문자열 수동 관리 필요
- key 충돌 위험
TO-BE: 클로저 기반
장점
- key 관리 불필요
- 호출부마다 독립적 상태
- params 전달 지원
고려할 점
- 인스턴스별 생성 필요