โ ๊ณตํต์
- ์งง์ ์๊ฐ์ ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํํด์, ๊ณผ๋ํ ์ด๋ฒคํธ ํธ์ถ์ ๋ฐฉ์ง
- ์์ฒญ๋๊ฒ ๋น ๋ฅธ์๋๋ก ํด๋ฆญ์ ์ฌ๋ฌ๋ฒ ํ๊ธฐ
- ๊ฒ์์ฐฝ์ ํค๋ณด๋๋ก ์ ๋ ฅํ๊ธฐ
- ์คํฌ๋กค๋ฐ๋ฅผ ์์๋๋ก ์ญ์ญ ์์ง์ด๊ธฐ
- ์ฐฝ์ ๋ฆฌ์ฌ์ด์งํ๊ธฐ
- ๋ฑ๋ฑ...
โ ๋๋ฐ์ด์ค (Debounce)
- ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ผ์ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐ ํ ์์ฒญ์ ์ํํ๋๋ฐ,
๊ธฐ๋ค๋ฆฌ๋ ๋์ ๊ฐ์ ์์ฒญ์ด ์ถ๊ฐ๋ก ๋ค์ด์ค๋ฉด ์ด์ ์์ฒญ์ ์ทจ์๋จ- ์ฐ์ด์ด์ ํธ์ถ๋๋ ํจ์ ์ค ๊ฐ์ฅ ๋ง์ง๋ง(๋๋ ๊ฐ์ฅ ์ฒ์)๋ง ํธ์ถ ๋๋๋ก ํจ
- ์ผ์์ด ๊ณ~~~์ ํด๋ฆญํ๋ฉด ํด๋ฆญ์ด ๋ฉ์ถ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ฉ์ถ๋ฉด ์คํํจ
- ๊ทธ๋์ ๋ง์ฝ ๋ฌดํ ์ ๋ ฅ์ ํ๋ฉด ๋ฌดํ ๊ธฐ๋ค๋ฆผ์ ํจ
- toggle ๋ฒํผ ์ด๋ฒคํธ ๋ฑ์ ์ฃผ๋ฉด ์ข์
function debounce(callback, limit = 100) {
let timeout
return function(...args) {
clearTimeout(timeout)
timeout = setTimeout(() => {
callback.apply(this, args)
}, limit)
}
}
//์คํ
inputDebounce.addEventListener("keyup", debounce(function() {
dispDebounce.textContent = ++debounceCount
}, 100))
์ฝ๋ ์ถ์ฒ : http://yoonbumtae.com/?p=3584
callback
: ์คํ ๋์์ธ ์ฝ๋ฐฑ ํจ์limit
: ์ผ๋ง ํ์ ํจ์๋ฅผ ์คํํ ์ง ๊ฒฐ์ (millisecond)- limit ์ด๋ด์ ํจ์๊ฐ ๋ฐ๋ณต ํธ์ถ ๋ ๊ฒฝ์ฐ
clearTimeout
์คํ →callback
์ด ์คํ๋์ง ์์ - ํจ์์ ๋ฐ๋ณต ํธ์ถ์ด ๋ฉ์ถ ํ์๋
clearTimeout
์คํํ์ง ์์ → limit ๋ฐ๋ฆฌ์ด ํ์callback.apply
์คํ
- limit ์ด๋ด์ ํจ์๊ฐ ๋ฐ๋ณต ํธ์ถ ๋ ๊ฒฝ์ฐ
apply
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์this
์ ๋ฒ์๋ฅผ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋ ๋ ๊ทธ ์ปจํ ์คํธ์this
๋ก ๋ง๋ฌ
โ ์ค๋กํ (Throttle)
- ์ผ์ ์๊ฐ ๋์ ๋ค์ด์ค๋ ์์ฒญ์ ๋ค ๋ชจ์์, ๋จ ํ๋ฒ๋ง ์ํ๋๋๋ก ํจ
- ์ค์ ์๊ฐ์ 1s๋ก ํ๋ฉด, 1์ด ๋์ ์ต๋ 1๋ฒ๋ง ์คํ๋จ
- ์ผ์์ด ๊ณ~~์ ํด๋ฆญํด๋ 1์ด์ 1๋ฒ์ฉ๋ง ์คํ์ด ๋๋ค
- ๋ฌดํ ์ ๋ ฅ์ ํ๋ฉด ์ ๊ธฐ์ ์ผ๋ก ์คํ ํจ
- ๋ฌดํ์คํฌ๋กค(์คํฌ๋กค์ ๋ด๋ฆด ๋ api์์ ์ ๊ธ์ ๋ถ๋ฌ์ด)์ ์ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์
- ์ฌ์ฉ์๊ฐ ์คํฌ๋กค ๋ด๋ฆฌ๋ ๊ฒ์ ๋ฉ์ถ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ ๋ณด๋ค, ๋ด๋ฆฌ๋ ๋์์๋ ์ชผ๋์ฉ ์ ๊ธ์ ๋ถ๋ฌ์ค๋ ํธ์ด ์ข์ผ๋ฏ๋ก
function throttle(callback, limit = 100) {
let waiting = false
return function() {
if(!waiting) {
callback.apply(this, arguments)
waiting = true
setTimeout(() => {
waiting = false
}, limit)
}
}
}
//์คํ
window.addEventListener("mousemove", throttle(() => {
dispThrottle.textContent = ++mouseThrottleCount
}, 500))
์ฝ๋ ์ถ์ฒ : http://yoonbumtae.com/?p=3584
callback
: ์คํ ๋์์ธ ์ฝ๋ฐฑ ํจ์limit
: ์ผ๋ง ํ์ ํจ์๋ฅผ ์คํํ ์ง ๊ฒฐ์ (millisecond)waiting
:true
์ธ ๊ฒฝ์ฐ if๋ฌธ์ ํ์ง ์์- ์ต์ด ํจ์๊ฐ ํธ์ถ๋ ์, waiting์ false์ด๋ฏ๋ก if๋ฌธ์ ํ → ์ด ๋ ์ฝ๋ฐฑํจ์๋ฅผ ์คํํ ๋ค waiting = true๋ก ๋ฐ๊ฟ
- waiting์ด true๊ฐ ๋์์ ๋, limit๋ฐ๋ฆฌ์ด ํ์ waiting = false๋ก ๋ณ๊ฒฝ๋๋ฉฐ, ์ฝ๋ฐฑํจ์๊ฐ ๋ค์ ์คํ ๋จ
apply
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์this
์ ๋ฒ์๋ฅผ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋ ๋ ๊ทธ ์ปจํ ์คํธ์this
๋ก ๋ง๋ฌ
๐์ฐธ๊ณ (๊ฐ์ฌํฉ๋๋ค)
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] JS์ ๋ฐ๋ณต๋ฌธ (0) | 2021.11.21 |
---|---|
[JavaScript] var๊ณผ ํธ์ด์คํ (0) | 2021.10.11 |
[JavaScript] Callback vs Promise vs async-await (0) | 2021.10.10 |
[JavaScript] ํ์ดํํจ์ vs ์ผ๋ฐํจ์ (0) | 2021.10.09 |
[JavaScript] window.requestAnimationFrame() (0) | 2021.10.07 |
๋๊ธ