Sobes.tech
Junior — Middle

Каква е разликата между техниките 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));