Что такое Throttling

Ответ

Throttling — это техника ограничения частоты выполнения функции, чтобы она вызывалась не чаще, чем раз в определённый промежуток времени. Полезно для оптимизации производительности, например, при обработке событий скролла или ресайза.

Пример с setTimeout:

function throttle(func, delay) {
  let lastCall = 0;
  return function(...args) {
    const now = new Date().getTime();
    if (now - lastCall >= delay) {
      func.apply(this, args);
      lastCall = now;
    }
  };
}

// Использование
window.addEventListener('resize', throttle(() => {
  console.log('Resize handler called');
}, 300));

Отличие от Debouncing: Throttling гарантирует регулярные вызовы, а Debouncing ждёт паузу перед вызовом.

Ответ 18+ 🔞

А, слушай, вот эта штука — throttling, ну, проще говоря, чтобы функция не дёргалась как сумасшедшая, а вызывалась пореже, в заданный промежуток. Типа, чтобы не охуеть от количества вызовов, когда ты скроллишь или окно меняешь размер.

Вот смотри, пример на коленке, с setTimeout:

function throttle(func, delay) {
  let lastCall = 0;
  return function(...args) {
    const now = new Date().getTime();
    if (now - lastCall >= delay) {
      func.apply(this, args);
      lastCall = now;
    }
  };
}

// Использование
window.addEventListener('resize', throttle(() => {
  console.log('Resize handler called');
}, 300));

И главное, не путай с debouncing, а то мозг сломаешь. Throttling — это как будто ты говоришь: «Ладно, вызывайся, но не чаще, чем раз в N миллисекунд». А debouncing — это: «Подожди, пока пользователь успокоится и перестанет дёргаться, вот тогда и делай дело». Чувствуешь разницу, ёпта? В одном случае вызовы идут регулярно, как по часам, а в другом — только после паузы, чтоб не ебать систему почём зря.