All original content is created in Ukrainian. Not all content has been translated yet. Some posts may only be available in Ukrainian.Learn more

Що таке debounce у JavaScript і чому це важливо?

Post cover: Що таке debounce у JavaScript і чому це важливо?
This content has not been translated yet.We're showing the original Ukrainian content below.
Якщо ви коли-небудь працювали з подіями в JavaScript, наприклад, scroll, resize чи keyup, то, ймовірно, помічали, що вони можуть викликатися дуже часто. Наприклад, під час введення тексту в поле пошуку подія keyup може спрацьовувати після кожного натискання клавіші. Це може створити зайве навантаження на браузер або сервер, особливо якщо кожен виклик виконує запит до API.
Щоб уникнути таких проблем, використовують debounce — техніку, яка обмежує частоту викликів функції, затримуючи її виконання до моменту, коли подія перестане повторюватися протягом заданого часу.

Як працює debounce?

Ідея проста: коли подія тригериться, ми відкладаємо виконання функції на певний проміжок часу. Якщо подія тригериться знову до завершення цього часу, таймер скидається і відлік починається заново. Лише коли подія припиняється, функція виконується.

Приклад debounce у JavaScript

function debounce(func, delay) {
  let timeout;
  return function (...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func.apply(this, args), delay);
  };
}

// Використання debounce для обробки події введення тексту
const input = document.querySelector("#search");
const handleInput = (event) => {
  console.log("Пошук: ", event.target.value);
};

input.addEventListener("keyup", debounce(handleInput, 500));
У цьому прикладі кожне введення в поле пошуку оновлює таймер, і лише після 500мс без нового введення виконується handleInput.

Де використовувати debounce?

  • Пошукові запити — щоб не відправляти запити на сервер при кожному натисканні клавіші.
  • Обробка зміни розміру вікна (resize) — щоб не перевантажувати браузер обчисленнями.
  • Слухачі подій scroll — наприклад, для завантаження нового контенту при прокрутці (безкінечний скрол / endless scroll).
  • Автозбереження форм — щоб зберігати дані тільки після завершення введення.
  • Валідація форм - наприклад, для перевірки вільного нікнейму.
Debounce допомагає оптимізувати продуктивність, зменшуючи кількість викликів функцій, які часто тригеряться. Це особливо корисно при роботі з частими подіями, такими як введення тексту, скролінг чи зміна розміру вікна. Використовуючи debounce, можна покращити взаємодію з користувачем і зменшити навантаження на систему.

This post doesn't have any additions from the author yet.

Віртуальний хмарний сервер: що це таке та в чому його особливість
03 Jan 10:58

Віртуальний хмарний сервер: що це таке та в чому його особливість

meme code
meme code@memecode
[Fix] Heroku / SearchBox addon - помилка ідексації "The client is unable to verify that the server is Elasticsearch"
31 Jan 13:09

[Fix] Heroku / SearchBox addon - помилка ідексації "The client is unable to verify that the server is Elasticsearch"

meme code
meme code@memecode
06 Feb 15:31

Фікс помилки [DEPRECATION] #adapters is deprecated. Use #profiles instead. (Codecov / docile)

meme code
meme code@memecode
Що таке Promise у JavaScript і як швидко зрозуміти суть?
18 Feb 11:01

Що таке Promise у JavaScript і як швидко зрозуміти суть?

meme code
meme code@memecode
Структура Promise (JavaScript) та як з цим працювати
18 Feb 14:33

Структура Promise (JavaScript) та як з цим працювати

meme code
meme code@memecode
Що таке Memoization (приклади Ruby та Ruby on Rails)?
20 Feb 18:16

Що таке Memoization (приклади Ruby та Ruby on Rails)?

meme code
meme code@memecode
What is CFB (Cipher Feedback)?
21 Mar 16:53

What is CFB (Cipher Feedback)?

meme code
meme code@memecode
Що таке XOR і як він працює?
21 Mar 17:05

Що таке XOR і як він працює?

meme code
meme code@memecode
Embed програмування: що це таке і з чого почати
24 Mar 16:48

Embed програмування: що це таке і з чого почати

meme code
meme code@memecode
Pessimistic Lock у Rails: що це таке і коли застосовувати. Які є альтернативи?
31 Mar 17:45

Pessimistic Lock у Rails: що це таке і коли застосовувати. Які є альтернативи?

meme code
meme code@memecode
Why does PostgreSQL skip ID when saving new records? (Heroku)
31 Mar 19:13

Why does PostgreSQL skip ID when saving new records? (Heroku)

meme code
meme code@memecode
[Codecov] What is the difference between patch and project coverage?
09 Apr 16:03

[Codecov] What is the difference between patch and project coverage?

meme code
meme code@memecode