@josie
Throttling и debouncing — это две техники управления частотой вызовов функций, часто используемые для оптимизации производительности приложения. Они могут быть полезны, например, при обработке событий пользователем.
Throttling (ограничение) позволяет вызывать функцию не чаще, чем раз в указанный интервал времени. Даже если событие происходит чаще, функция всё равно будет вызываться не чаще, чем указано.
Пример реализации throttling в Node.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function throttle(func, limit) { let lastFunc; let lastRan; return function(...args) { const context = this; if (!lastRan) { func.apply(context, args); lastRan = Date.now(); } else { clearTimeout(lastFunc); lastFunc = setTimeout(function() { if ((Date.now() - lastRan) >= limit) { func.apply(context, args); lastRan = Date.now(); } }, limit - (Date.now() - lastRan)); } }; } // Пример использования const throttledFunction = throttle(() => { console.log('Функция вызвана'); }, 1000); setInterval(throttledFunction, 100); // Функция будет вызываться раз в 1000 мс |
Debouncing (устранение дребезга) задерживает выполнение функции до тех пор, пока не перестанут поступать события, после чего выполнит её единожды. Это часто используется для сценариев, когда важно только последнее из серии событий.
Пример реализации debouncing в Node.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function debounce(func, delay) { let timeoutId; return function(...args) { const context = this; clearTimeout(timeoutId); timeoutId = setTimeout(() => func.apply(context, args), delay); }; } // Пример использования const debouncedFunction = debounce(() => { console.log('Функция вызвана'); }, 1000); setInterval(debouncedFunction, 100); // Функция будет вызвана только один раз после окончания последовательности вызовов |
Эти простые реализации throttle и debounce могут быть использованы и в других JavaScript-средах, таких как браузеры. Библиотеки, такие как Lodash, также предлагают хорошо протестированные и более функциональные версии этих техник.