Debounce_Throttle - upswp/THXSTORE GitHub Wiki

Debounce

  • μž…λ ₯을 λ°›μœΌλ©΄ νŠΉμ • λ™μž‘μ„ ν•˜λŠ”λ°κΉŒμ§€ μΌμ •ν•œ 지연이 κ±Έλ¦°λ‹€. μ§€μ—°λ˜λŠ” λ™μ•ˆ μƒˆλ‘œμš΄ μž…λ ₯을 λ°›μœΌλ©΄ 이전 μž…λ ₯에 λŒ€μ‘ν•˜λŠ” λ™μž‘μ„ ν•˜μ§€ μ•Šκ³  또 λ‹€μ‹œ λ™μΌν•œ 지연을 κ°€μ§„λ‹€.
  • 즉, μƒˆλ‘œμš΄ μž…λ ₯이 이전 μž…λ ₯을 μ·¨μ†Œν•˜λŠ” 방법.
  • 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” νšŒμ›κ°€μž… μ‹œ 이메일 쀑볡을 ν™•μΈν•˜λŠ”λ° μ μš©ν•˜μ˜€λ‹€. μ΄λ©”μΌλž€μ— μž…λ ₯을 ν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή 이메일이 μ€‘λ³΅λ˜μ—ˆλŠ”μ§€ μ„œλ²„μ— ν™•μΈν•˜λŠ”λ°, debounceλ₯Ό μ μš©ν•¨μœΌλ‘œμ¨ 톡신 횟수λ₯Ό 쀄일 수 μžˆμ—ˆλ‹€.
  • ν΄λ‘œμ €μ™€ setTimeout을 적절히 μ‚¬μš©ν•΄μ„œ λ§Œλ“€ 수 μžˆλ‹€.
const debounce = (func, delay) => {
  let timeoutId = null;
  return (...args) => {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(func.bind(null,...args), delay);
  }
}

Throttle

  • μž…λ ₯을 λ°›μœΌλ©΄ νŠΉμ • λ™μž‘μ„ ν•˜λŠ”λ°κΉŒμ§€ μΌμ •ν•œ 지연이 κ±Έλ¦°λ‹€. μ§€μ—°λ˜λŠ” λ™μ•ˆ μƒˆλ‘œμš΄ μž…λ ₯을 받아도 λ¬΄μ‹œν•œλ‹€.
  • ν΄λ‘œμ €μ™€ setTimeout을 적절히 μ‚¬μš©ν•΄μ„œ λ§Œλ“€ 수 μžˆλ‹€.
  • 이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ”±νžˆ μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€. 라이브 방솑 λ•Œ μ±„νŒ…μ„ ν•  경우 κΈΈμ–΄μ§„ μ±„νŒ… 내역에 λ§žμΆ°μ„œ μŠ€ν¬λ‘€μ„ λ‚΄λ¦¬λŠ”λ° μ“°λ €κ³  ν–ˆλŠ”λ°, 맀번 λ©”μ„Έμ§€κ°€ 적힐 λ•Œλ§ˆλ‹€ κ°±μ‹ ν•˜λŠ”κ²Œ 더 쒋은 μ‚¬μš©μž κ²½ν—˜μ„ 쀄 것 κ°™μ•„μ„œ μ μš©ν•˜μ§€ μ•Šμ•˜λ‹€.
const throttle = (func, delay) => {
  let throttled = false;
  return (...args) => {
    if(!throttled) {
      throttled = true;
      setTimeout(() => {
        func(...args);
        throttled = false;
      }
  },delay);