Какое различие между техникой throttling и debouncing при обработке событий в JavaScript?
Ответ от нейросети
sobes.tech AI
Throttling и debouncing — это техники контроля частоты вызова функций при обработке событий в JavaScript, чтобы избежать избыточных вызовов.
-
Debouncing задерживает выполнение функции до тех пор, пока событие не перестанет вызываться в течение определённого времени. Если событие происходит снова — таймер сбрасывается. Это полезно, например, при обработке ввода пользователя, чтобы функция срабатывала только после того, как пользователь закончил ввод.
-
Throttling ограничивает вызов функции не чаще, чем заданный интервал времени. Функция будет вызываться регулярно, но не чаще указанного интервала, даже если событие происходит чаще. Это удобно для событий прокрутки или ресайза окна, чтобы функция срабатывала с постоянной периодичностью.
Пример debouncing:
function debounce(func, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), delay);
};
}
window.addEventListener('resize', debounce(() => {
console.log('Resize event handled after user stops resizing');
}, 300));
Пример throttling:
function throttle(func, limit) {
let inThrottle;
return function(...args) {
if (!inThrottle) {
func.apply(this, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
window.addEventListener('scroll', throttle(() => {
console.log('Scroll event handled at most once every 200ms');
}, 200));