디바운싱은 시간이 많이 걸리는 작업이 너무 자주실행되어 웹 페이지의 성능이 지연되지 않도록 하는데 사용되는 프로그래밍 기법이다.
창업을 꿈꾸던 우리가 키보드 쇼핑몰을 만들었다.
- 첫 키보드를 판매하기 위해 구매 버튼을 만들었다.
- 구매 버튼을 누르면 API를 호출해서 주문 리스트에 저장된다.
- 그런데 API호출 속도가 좀 느려서 1초 후에야 호출을 성공했다는 응답을 받는다.
1초 쯤이야 대수롭지 않게 생각하고 쇼핑몰을 열었다.
그런데 클릭을 여러번 하는 습관이 있는 사람이 1초동안 여러번 광클을 한것이다.
8번의 주문이 들어갔고, 240만원이 빠져나간 소비자의 항의를 들을 수 밖에 없다.
const clickBtn = () => {
console.log('30만원 입금')
};
const debounce = (func, ms) => {
// 현재 타이머가 실행되고 있으면 timeout에 타이머의 id를 저장한다.
let timeout;
return () => {
// 만약 타이머가 실행되고 있으면 현재 타이머를 지운다.
if (timeout) {
clearTimeout(timeout)
}
// timeout에 새로운 타이머를 할당한다. 만약 ms만큼 시간이 지났으면 함수를 실행한다.
timeout = setTimeout(() => {
func();
}, ms);
}
};
document.querySelector('#btn').addEventListener('click', debounce(clickBtn, 500));