Debounce: что это такое и как улучшить пользовательский опыт с его помощью

debounce - это техника программирования, которая позволяет уменьшить количество вызовов функции в результате повторных событий, происходящих близко одно к другому во времени.

В простейшем случае debounce может быть реализован с помощью функции setTimeout, которая задерживает вызов функции на определенное количество времени. Например, если мы хотим запустить функцию каждый раз, когда пользователь нажимает на кнопку, мы можем использовать следующий код:


let count = 0;
function handleClick() {
  count++;
  console.log(`Button was clicked ${count} times.`);
}
const button = document.querySelector('button');
button.addEventListener('click', handleClick);

Однако, если пользователь быстро нажимает на кнопку несколько раз, мы получим много сообщений в консоли, что затруднит чтение вывода.

Чтобы решить эту проблему, мы можем использовать debounce. Реализуем это с помощью функции setTimeout. Здесь мы будем использовать delay - задержку времени, такую чтобы она была достаточно длинной, чтобы несанкционированные клики на кнопку не считались. В нашем случае мы установим временную задержку в 500 миллисекунд:


let count = 0;
function handleClick() {
  count++;
  console.log(`Button was clicked ${count} times.`);
}
const button = document.querySelector('button');
function debounce(func, delay) {
  let timerId;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timerId);
    timerId = setTimeout(function() {
      func.apply(context, args);
    }, delay);
  }
}
const debounceHandleClick = debounce(handleClick, 500);
button.addEventListener('click', debounceHandleClick);

Теперь, если пользователь быстро нажимает на кнопку несколько раз, мы получим только одно сообщение в консоль:


Button was clicked 1 times.

И только после 500 миллисекунд произойдет следующий вызов функции.

Обратите внимание, что мы оборачиваем исходную функцию внутри функции debounce, возвращаемой из-за функции. Это затем позволяет нам сохранить ссылку на таймер, который мы можем очистить при следующем срабатывании функции. Мы также используем apply для передачи правильного контекста и аргументов в функцию оболочки.

Похожие вопросы на: "debounce "

Python Print: The Ultimate Guide
CSS Content: Tips and Tricks for Enhancing Your Website's Visual Appeal
Sync Browser - синхронизация ваших данных на всех устройствах
PSR: стандарты для PHP-кода
Exploring the Power of Constraints in Programming and Design
Split VBA: Разбиваем текст на части в Excel
NP Append: добавление элементов в NumPy массивы
Метод lstrip в Python
<h1>Python Loop For: A Comprehensive Guide to Using For Loops in Python
Управление заголовками запросов с помощью Axios