특정 동작을 일정한 시간 간격으로 한번만 실행하도록 하는 기술
쓰로틀링은 이벤트 핸들러의 호출을 제한하여 성능을 향상시키는 데 사용
window.addEventListener("scroll", ()=> console.log("스크롤 발생");
// 클로저를 이용해 timer 변수 사용
function throttling(cb, time) {
let timer;
return function(...args) {
// timer가 존재한다면 함수 종료
if(timer) {
return;
}
timer = setTimeout(()=>{
cb.apply(this, args);
// 다음 타이머 적용을 위해 timer 초기화
timer = null;
}, time);
}
}
const throttledScroll = throttling(() => console.log("스크롤 발생"), 1000);
window.addEventListener("scroll", throttledScroll);
연이어 발생하는 이벤트를 무시하고 일정 시간이 지난 후에 한 번만 이벤트를 실행하도록 하는 기술
주로 사용자 입력에 반응하는 이벤트(예: 키보드 입력, 마우스 이동 등)을 처리할 때 유용하게 쓰입니다.
const $SearchBar = document.getElementById("searchBar");
const search = (e) => {
const value = e.target.value;
console.log(value);
};
$SearchBar.addEventListener("input", (e) => search(e));
const $SearchBar = document.getElementById("searchBar");
function debounce(cb, time) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
cb.apply(this, args);
}, time);
};
}
const search = debounce((value) => console.log(value), 500);
$SearchBar.addEventListener("input", (e) => search(e.target.value));
loadsh
라이브러리는 throttling과 debuncing이 구현되어있어 loadsh 라이브러리를 활용하면 throttling과 debouncing 함수를 구현하지 않아도 쉽게 사용할 수 있습니다.
loadsh
설치
npm install loadsh
import { throttle } from "./loadsh"
const throttledScroll = throttle(() => console.log("스크롤 발생"), 1000);
window.addEventListener("scroll", throttledScroll);
import { debounce } from "./loadsh"
const $SearchBar = document.getElementById("searchBar");
const search = debounce((value) => console.log(value), 500);
$SearchBar.addEventListener("input", (e) => search(e.target.value));