Ответ
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 — это: «Подожди, пока пользователь успокоится и перестанет дёргаться, вот тогда и делай дело». Чувствуешь разницу, ёпта? В одном случае вызовы идут регулярно, как по часам, а в другом — только после паузы, чтоб не ебать систему почём зря.