Как реализовать throttling и debouncing в Node.js?

Пользователь

от josie , в категории: JavaScript , 2 месяца назад

Как реализовать throttling и debouncing в Node.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от linnea , 2 месяца назад

@josie 

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

Throttling

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 (устранение дребезга) задерживает выполнение функции до тех пор, пока не перестанут поступать события, после чего выполнит её единожды. Это часто используется для сценариев, когда важно только последнее из серии событий.


Пример реализации 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, также предлагают хорошо протестированные и более функциональные версии этих техник.

Похожие обсуждения:

Как реализовать авторизацию в node.js?
Как реализовать авторизацию в node.js?
Как реализовать простую очередь в node.js?
Как реализовать простую очередь в node.js?
Ищу опытного разработчика драйверов для Windows
Как правильно и просто реализовать поточность в python?