Каква е разликата между техниките throttling и debouncing при обработка на събития в JavaScript?
sobes.tech AI
Отговор от 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 след като потребителят спре да променя размера');
}, 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 максимум веднъж на всеки 200ms');
}, 200));