: 디바운스는 짧은 시간 간격으로 이벤트가 연속해서 발생하면 이벤트 핸들러를 호출하지 않다가 일정 시간이 경과한 이후에 이벤트 핸들러가 한 번만 호출되도록 한다. 좀 더 쉽게 표현해보면 디바운스는 짧은 시간 간격으로 발생하는 이벤트를 그룹화해서 마지막에 한 번만 이벤트 핸들러가 호출되도록 한다.
1) 버튼 관련 적용(쓰로틀도 포함)
2) input 이벤트에서 유효성 검사를 할 때의 상황
** 추가로 scroll 이벤트와 관련된 디바운스도 포함시켜 봤다.
let scrollId;
window.addEventListener('scroll', function() {
if(scrollId) clearTimeout(scrollId);
scrollId = setTimeout(function() {
console.log('scrolled')
},500)
})
import { debounce } from 'lodash';
const onChange = () => {
console.log("Something changed);
lodashDebounceOnChange();
};
const lodashDebounceOnChange = debounce(() => {
console.log("something activated");
}, 500);
: 쓰로틀은 짧은 시간 간격으로 연속해서 발생하는 이벤트를 그룹화해서 일정 시간 단위로 이벤트 핸들러가 호출되도록 호출 주기를 만든다. 내 식대로 풀어써보면 연속으로 이벤트가 발생해도 정해진 간격의 호출 주기를 유지하도록 하는 것을 의미한다. 디바운스는 연속해서 클릭하는걸 무시하다가 끝에 발생하는 한번의 이벤트를 캐치하도록 한다면, 쓰로틀은 연속해서 이벤트가 발생해도 이벤트에 따른 특정한 callback의(이벤트 핸들러의) 호출 주기를 유지하도록 한다.
1) debounce 쪽에서 같이 제작했으므로 해당 codeSandBox를 참고한다.
2) scroll 관련
let scrollId;
window.addEventListener('scroll', function() {
if(scrollId) return;
scrollId = setTimeout(function() {
console.log('scrolled')
scrollId = null;
},500)
})