๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋””๋ฐ”์šด์Šค ํ•จ์ˆ˜๋ฅผ ์ ‘ํ•ด๋ณด์‹  ์  ์žˆ๋‚˜์š”?

์Šคํฌ๋กค, ๊ฒ€์ƒ‰์ฐฝ ์ž…๋ ฅ, ์œˆ๋„์šฐ ๋ฆฌ์‚ฌ์ด์ฆˆ์ฒ˜๋Ÿผ ์งง์€ ์‹œ๊ฐ„์— ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.


debounce()๋ž€?

์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ˜๋ณต ๋ฐœ์ƒํ•ด๋„, ๋งˆ์ง€๋ง‰ ํ˜ธ์ถœ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜ ์ œ์–ด ๊ธฐ๋ฒ•

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒ€์ƒ‰์ฐฝ์— ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค API๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์–ด์š”.
์ด๋•Œ debounce()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ์ด ๋ฉˆ์ถ˜ ํ›„ ํŠน์ • ์‹œ๊ฐ„(์˜ˆ: 300ms)์ด ์ง€๋‚˜๋ฉด ๋”ฑ ํ•œ ๋ฒˆ API๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.


debounce()๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ

๋‹ค์Œ๊ณผ ๊ฐ™์ด “๋„ˆ๋ฌด ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ด๋ฒคํŠธ”์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. :

  • ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ API ํ˜ธ์ถœ
  • ์œˆ๋„์šฐ ๋ฆฌ์‚ฌ์ด์ฆˆ ์ด๋ฒคํŠธ
  • ์Šคํฌ๋กค ์ด๋ฒคํŠธ(๋ฌดํ•œ ์Šคํฌ๋กค, ์Šคํฌ๋กค ์œ„์น˜ ์ €์žฅ ๋“ฑ)
  • ์ž…๋ ฅ ํผ ์ž๋™ ์ €์žฅ
  • ๋ฒ„ํŠผ ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€

debounce() ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹ ์š”์•ฝ

  1. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํƒ€์ด๋จธ๋ฅผ ์ดˆ๊ธฐํ™”
  2. ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ถ”๊ฐ€ ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ธฐ์กด ํƒ€์ด๋จธ ์ทจ์†Œ
  3. ๋งˆ์ง€๋ง‰ ์ด๋ฒคํŠธ๊ฐ€ ๋“ค์–ด์˜จ ํ›„ ์ง€์ • ์‹œ๊ฐ„ ์ง€๋‚œ ๋’ค ์‹คํ–‰

์ฆ‰, "๋ณด๋‹ค๊ฐ€ ๋ฉˆ์ถ”๋ฉด ์‹คํ–‰" ๊ตฌ์กฐ!


๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” debounce ์ฝ”๋“œ 

function debounce(func, delay) {
    let timer;

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

 

์‚ฌ์šฉ ์˜ˆ์ œ 1 — ๊ฒ€์ƒ‰์ฐฝ API ํ˜ธ์ถœ ์ œ์–ด

const search = debounce(function (keyword) {
    console.log("API ํ˜ธ์ถœ:", keyword);
}, 300);

document.querySelector("#search").addEventListener("input", (e) => {
    search(e.target.value);
});

ํšจ๊ณผ:
์‚ฌ์šฉ์ž๊ฐ€ ๋น ๋ฅด๊ฒŒ ํƒ€์ดํ•‘ํ•ด๋„ API๋Š” ์ž…๋ ฅ์ด ๋ฉˆ์ถ˜ ํ›„ ๋‹จ ํ•œ ๋ฒˆ ์‹คํ–‰๋จ.


์‚ฌ์šฉ ์˜ˆ์ œ 2 — ์Šคํฌ๋กค ์ด๋ฒคํŠธ ์ตœ์ ํ™”

function handleScroll() {
    console.log("์Šคํฌ๋กค ์œ„์น˜:", window.scrollY);
}

window.addEventListener("scroll", debounce(handleScroll, 200));

์Šคํฌ๋กค์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฐ”์šด์Šค๋กœ CPU ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

throttle๊ณผ debounce ์ฐจ์ด

๊ฐœ๋… ๋™์ž‘ ์›๋ฆฌ
debounce ์ž…๋ ฅ์ด ๋ฉˆ์ถ˜ ๋’ค ํ•œ ๋ฒˆ ์‹คํ–‰ ๊ฒ€์ƒ‰์ฐฝ ์ž…๋ ฅ
throttle ์ผ์ • ๊ฐ„๊ฒฉ๋งˆ๋‹ค ์‹คํ–‰ ์Šคํฌ๋กค ์œ„์น˜ ๊ณ„์‚ฐ

๋‘˜ ๋‹ค ์ด๋ฒคํŠธ ์ œ์–ด์ง€๋งŒ ๋ชฉ์ ๊ณผ ํƒ€์ด๋ฐ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.


์ •๋ฆฌ

  • debounce()๋Š” ์—ฐ์†๋œ ํ˜ธ์ถœ์„ ๋ฌถ์–ด์„œ ๋งˆ์ง€๋ง‰ ํ˜ธ์ถœ๋งŒ ์‹คํ–‰ํ•œ๋‹ค.
  • ํƒ€์ดํ•‘, ์Šคํฌ๋กค, ๋ฆฌ์‚ฌ์ด์ฆˆ ๋“ฑ ์ด๋ฒคํŠธ ์ตœ์ ํ™”์— ํ•„์ˆ˜.
  • setTimeout์„ ์ด์šฉํ•ด ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.
  • throttle๊ณผ์˜ ์ฐจ์ด๊นŒ์ง€ ์•Œ์•„๋‘๋ฉด ๋” ํ™•์‹ค!
๋ฐ˜์‘ํ˜•