Throttle (μ°λ‘ν)
Throttleμ΄λ νΉμ ν¨μκ° μΌμ μκ° λ΄μ μ΅λ ν λ²λ§ μ€νλλλ‘ μ ννλ κΈ°λ²
μ΄λ²€νΈκ° μ무리 λ§μ΄ λ°μν΄λ μ§μ ν delay κ°κ²©λ§λ€ λ± ν λ²λ§ μ€νλ©λλ€.
λΉμ
μλκΌμ§λ₯Ό μ무리 μΈκ² νμ΄λ, λ°ΈλΈκ° 200msλ§λ€ ν λ²μ©λ§ λ¬Όμ νλ €λ³΄λ΄λ κ²
μ½λ λΆμ
const throttle = (fn, delay) => {
let timer = null // νμ΄λ¨Έ ID μ μ₯ λ³μ
return (...args) => { // μ€μ λ‘ νΈμΆλ λνΌ ν¨μ λ°ν
if (!timer) { // νμ΄λ¨Έκ° μμ λλ§ μ€ν
timer = setTimeout(() => {
fn(...args) // delay ν μλ³Έ ν¨μ μ€ν
timer = null // νμ΄λ¨Έ μ΄κΈ°ν β λ€μ μ€ν νμ©
}, delay)
}
// timerκ° μμΌλ©΄ μ무κ²λ νμ§ μμ (무μ)
}
}
JavaScript
볡μ¬
μ€ν νλ¦
μ€ν¬λ‘€ μ΄λ²€νΈ λ°μ νμ β [1] [2] [3] [4] [5] [6] ...
β
throttle(fn, 200ms) μ μ© β [1] 무μ 무μ 무μ [5] 무μ ...
β β
μ¦μ μ€ν 200ms ν μ€ν
Plain Text
볡μ¬
Throttle vs Debounce λΉκ΅
κ΅¬λΆ | Throttle | Debounce |
λμ | μΌμ κ°κ²©λ§λ€ ν λ² μ€ν | λ§μ§λ§ νΈμΆ ν μΌμ μκ° λ€ μ€ν |
μ ν©ν κ²½μ° | μ€ν¬λ‘€, 리μ¬μ΄μ¦, λ§μ°μ€ μ΄λ | κ²μμ°½ μ
λ ₯, λ²νΌ μ€λ³΅ ν΄λ¦ λ°©μ§ |
μ€κ° μ€ν |
μμλ‘ μ΄ν΄νκΈ°
μ΄λ²€νΈ: ββββββββββββββββββββββββββββββββββββββββββΆ
β β β β β β β β β β β β β
Throttle: β β β β β
(200msλ§λ€ ν λ²μ© μ€ν)
Debounce: β
(μ΄λ²€νΈκ° λ©μΆκ³ λμ 200ms ν ν λ²λ§ μ€ν)
Plain Text
볡μ¬
μ€μ μ¬μ© μ (List.jsx)
// 200msλ§λ€ ν λ²λ§ handleScroll μ€ν
const handleScroll = throttle(() => {
const { scrollHeight, scrollTop, clientHeight } = element
const isScrollingDown = scrollTop > prevScrollTop.current
prevScrollTop.current = scrollTop
if (isScrollingDown && clientHeight + scrollTop >= scrollHeight - 1) {
addPage(nextPage) // λ€μ νμ΄μ§ λ‘λ
}
}, 200)
element.addEventListener('scroll', handleScroll)
JavaScript
볡μ¬
μ€ν¬λ‘€ μ΄λ²€νΈλ 1μ΄μ μμ~μλ°± λ² λ°μν μ μμ΅λλ€.
Throttleμ μ μ©νμ§ μμΌλ©΄ addPage()κ° κ·Ήν μ§§μ μκ°μ μμ λ² νΈμΆλμ΄ μλ² κ³ΌλΆν λλ μ€λ³΅ μμ²μ΄ λ°μν©λλ€.
λΌμ΄λΈλ¬λ¦¬ νμ©
μ€λ¬΄μμλ μ§μ ꡬννμ§ μκ³ lodash λΌμ΄λΈλ¬λ¦¬λ₯Ό μ£Όλ‘ μ¬μ©ν©λλ€.
npm install lodash
Bash
볡μ¬
import { throttle } from 'lodash'
const handleScroll = throttle(() => {
// ...
}, 200)
JavaScript
볡μ¬




