Debouncing

NOTE

Debouncing은 μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ μ¦‰μ‹œ 처리λ₯Ό ν•˜μ§€ μ•Šκ³ , 일정 μ‹œκ°„ λ™μ•ˆ μ΄λ²€νŠΈκ°€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ κ·Έλ•Œμ„œμ•Ό ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ 검색창에 ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•  λ•Œ, keyup μ΄λ²€νŠΈλ§ˆλ‹€ μ„œλ²„μ— API μš”μ²­μ„ λ³΄λ‚΄λŠ” 것 λŒ€μ‹ , μž…λ ₯이 멈좘 ν›„ 일정 μ‹œκ°„ λ™μ•ˆ κΈ°λ‹€λ Έλ‹€κ°€ μ„œλ²„ μš”μ²­μ„ λ³΄λ‚΄λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

  • λ™μž‘ 원리: μ΄λ²€νŠΈκ°€ μ—°μ†μ μœΌλ‘œ λ°œμƒν•˜λŠ” λ™μ•ˆ, 이전 ν˜ΈμΆœμ€ μ·¨μ†Œλ˜κ³  일정 μ‹œκ°„μ΄ μ§€λ‚œ ν›„ λ§ˆμ§€λ§‰ 호좜만 μ‹€ν–‰λ©λ‹ˆλ‹€.

  • μ‚¬μš© μ˜ˆμ‹œ:

    • μ‚¬μš©μžκ°€ ν…μŠ€νŠΈ μž…λ ₯ ν•„λ“œμ— 타이핑할 λ•Œλ§ˆλ‹€ μ„œλ²„λ‘œ API ν˜ΈμΆœμ„ 보내지 μ•Šλ„λ‘ 함

    • μœˆλ„μš° 크기 λ³€κ²½, 슀크둀 이벀트 λ“±μ—μ„œ κ³Όλ„ν•œ 계산을 ν”Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©


function debounce(func, delay) {
    let timer;
    return function(...args) {
        clearTimeout(timer);
        timer = setTimeout(() => {
            func(...args);
        }, delay);
    };
}
 
document.getElementById('searchInput').addEventListener('input', debounce(function() {
    console.log('검색어:', this.value);
}, 500));