Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
АлСксСй Никитин

🧩 Debounce ΠΈ Throttle Π² JavaScript: ΠΎΠ΄ΠΈΠ½ сниппСт β€” Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ

🧩 Debounce ΠΈ Throttle Π² JavaScript: ΠΎΠ΄ΠΈΠ½ сниппСт β€” Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Когда Ρ‚Ρ‹ ловишь события Π²Ρ€ΠΎΠ΄Π΅ scroll, resize, input, Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: debounce (ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈ throttle (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ частоту Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²). НиТС β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция, которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅: function throttleDebounce(fn, delay, mode = 'throttle') { let lastCall = 0; let timeout; return function (...args) { const now = Date.now(); if (mode === 'debounce') { clearTimeout(timeout); timeout = setTimeout(() => fn.apply(this, args), delay); } else { if (now - lastCall >= delay) { lastCall = now; fn.apply(this, args); } } }; } // ИспользованиС: // Debounce (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΏΠΎ ΠΈΠ½ΠΏΡƒΡ‚Ρƒ) input.addEventListener('input', throttleDebounce(handleInput, 300, 'debounce')); // Throttle (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, scroll) window.addEventListener('scroll', throttleDebounce(trackScroll, 200, 'throttle')); πŸ” Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ‹ моТСшь ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈ свой CPU Π±Π΅Π· лишнСй Π±ΠΎΠ»ΠΈ. ΠŸΡ€ΠΎΡΡ‚Π°Ρ настройка

🧩 Debounce ΠΈ Throttle Π² JavaScript: ΠΎΠ΄ΠΈΠ½ сниппСт β€” Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ

Когда Ρ‚Ρ‹ ловишь события Π²Ρ€ΠΎΠ΄Π΅ scroll, resize, input, Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. Для этого ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ:

debounce (ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈ throttle (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ частоту Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²). НиТС β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция, которая ΡƒΠΌΠ΅Π΅Ρ‚ ΠΈ Ρ‚ΠΎ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅:

function throttleDebounce(fn, delay, mode = 'throttle') {

let lastCall = 0;

let timeout;

return function (...args) {

const now = Date.now();

if (mode === 'debounce') {

clearTimeout(timeout);

timeout = setTimeout(() => fn.apply(this, args), delay);

} else {

if (now - lastCall >= delay) {

lastCall = now;

fn.apply(this, args);

}

}

};

}

// ИспользованиС:

// Debounce (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΏΠΎ ΠΈΠ½ΠΏΡƒΡ‚Ρƒ)

input.addEventListener('input', throttleDebounce(handleInput, 300, 'debounce'));

// Throttle (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, scroll)

window.addEventListener('scroll', throttleDebounce(trackScroll, 200, 'throttle'));

πŸ” Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ‹ моТСшь ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈ свой CPU Π±Π΅Π· лишнСй Π±ΠΎΠ»ΠΈ.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ настройка: mode = 'debounce' ΠΈΠ»ΠΈ 'throttle' β€” Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

πŸ“¦ ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для всСх соврСмСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Экономь рСсурсы β€” пиши ΠΊΠ°ΠΊ самурай πŸ—‘

Snipit

πŸ”— https://dzen.ru/id/647785ca082c0024532dca3d

#js #frontend #сниппСты