Для leading-only throttle запомните время последнего выполнения. Первый вызов выполняется сразу, обращения до истечения интервала игнорируются, this и аргументы передаются исходной функции.
Самописный throttle: реализация функции ограничения частоты вызовов
Для leading-only throttle запомните время последнего выполнения. Первый вызов выполняется сразу, обращения до истечения интервала игнорируются, this и аргументы передаются исходной функции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию throttle, которая ограничивает количество вызовов переданной функции за заданный промежуток времени. Функция должна принимать два параметра: целевую функцию и интервал в миллисекундах, и возвращать обёртку, вызывающую оригинал не чаще указанного интервала. При попытках вызвать функцию чаще, чем разрешено, лишние вызовы должны либо игнорироваться, либо откладываться до окончания текущего интервала, в зависимости от выбранной стратегии.
(Кодовые блоки сохраняются без изменений.)
Ответ
Для leading-only throttle запомните время последнего выполнения. Первый вызов выполняется сразу, обращения до истечения интервала игнорируются, this и аргументы передаются исходной функции.
function throttle(fn, interval) {
if (!Number.isFinite(interval) || interval < 0) throw new RangeError('Некорректный интервал');
let last = -Infinity;
return function (...args) {
const now = performance.now();
if (now - last < interval) return undefined;
last = now;
return fn.apply(this, args);
};
}
Это явно выбранная стратегия без отложенного последнего вызова. performance.now монотонен и не зависит от перевода системных часов. Если функция бросит исключение, интервал всё равно считается начавшимся. Ограничивается частота запусков, а не количество одновременно работающих async-операций.