ํ์ด๋จธ
ํธ์ถ ์ค์ผ์ค๋ง
- ํจ์๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถํ์ง ์๊ณ ์ผ์ ์๊ฐ์ด ๊ฒฝ๊ณผ๋ ์ดํ์ ํธ์ถ์ ์์ฝํ๋ ๊ฒ์ ํธ์ถ ์ค์ผ์ค๋ง ์ด๋ผ ํจ
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ด๋จธ ํจ์๋ฅผ ์ ๊ณต
- ํ์ด๋จธ ์์ฑ ํจ์ :
setTimeout
, setInterval
- ํ์ด๋จธ ์ ๊ฑฐ ํจ์ :
clearTimeout
, clearInterval
- ํ์ด๋จธ ํจ์๋
ECMAScript
์ฌ์์ ์ ์๋ ๋นํธ์ธ ํจ์๊ฐ ์๋๋ค.
- Node.js ํ๊ฒฝ์์ ์ ์ญ ๊ฐ์ฒด์ ๋ฉ์๋ ์ฆ, ํธ์คํธ ๊ฐ์ฒด
- ํ์ด๋จธ ํจ์๋ฅผ ์ฌ์ฉํด ์์ฑํ ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๊ฐ ํธ์ถ๋๋ ๋์ ๋ฐฉ์
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฑ๊ธ ์ค๋ ๋(
single thread
)๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํ์ด๋จธ ํจ์ setTimeout
, setInterval
์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ๋์ ํ๋ค.
ํ์ด๋จธ ํจ์
setTimeout/ clearTimeout
setTimeout
ํจ์๋ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ฝ๋ฐฑ ํจ์, ๋๋ฒ์งธ ์ธ์๋ก ์๊ฐ, ์ ๋ฌํด์ผ ํ ์ธ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ธ๋ฒ ์งธ ์ธ์๋ก ์ ๋ฌํ์ฌ ์ฌ์ฉ
- ์ ๋ฌ ๋ฐ์ ์๊ฐ์ผ๋ก ๋จ ํ ๋ฒ ๋์ํ๋ ํ์ด๋จธ๋ฅผ ์์ฑํ๊ณ ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์ ํธ์ถ(ํ๋ฒ ์คํ)
| |
| setTimeout(() => console.log('Hi!'), 1000); |
| |
| |
| |
| setTimeout(name => console.log(`Hi! ${name}.`), 1000, 'Lee'); |
| |
| |
| setTimeout(() => console.log('Hello!')); |
setTimeout
์ ์์ฑ๋ ํ์ด๋จธ๋ฅผ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ํ์ด๋จธ id๋ฅผ ๋ฐํ
- ํ์ด๋จธ id๋ฅผ
clearTimeout
ํจ์์ ์ธ์๋ก ์ ๋ฌํ์ฌ ํ์ด๋จธ๋ฅผ ์ทจ์ํ ์ ์๋ค.
| const timerId = setTimeout(() => console.log('excute call back'), 1000); |
| |
| clearTimeout(timerId); |
setInterval / clearInterval
setInterval
ํจ์์ ์ ๋ฌํ ์ธ์๋ setTimeout
๊ณผ ๋์ผํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ์ธ์ ์ฝ๋ฐฑ ํจ์, ๋๋ฒ์งธ ์ธ์ ์๊ฐ, ์ ๋ฌํ ์ธ์๊ฐ ์๋ค๋ฉด ์ธ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ
setInterval
ํจ์๋ ์ ๋ฌ ๋ฐ์ ์๊ฐ์ผ๋ก ๋ฐ๋ณต ๋์ํ๋ ํ์ด๋จธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฆ, ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋ ๋๋ง๋ค ์ ๋ฌ ๋ฐ์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์คํ ๋จ
- ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณ ์ ํ ํ์ด๋จธ id๋ฅผ ๋ฐํํ๋ฉฐ
clearInterval
๋ก ์ทจ์ ๊ฐ๋ฅ
| let count = 1; |
| |
| |
| |
| const timeoutId = setInterval(() => { |
| console.log(count); |
| |
| |
| |
| if (count++ === 5) clearInterval(timeoutId); |
| }, 1000); |
๋๋ฐ์ด์ค์ ์ค๋กํ
scroll
, resize
, input
, mousemove
๊ฐ์ ์ด๋ฒคํธ๋ ์งง์ ์๊ฐ ์ฐ์์ ์ผ๋ก ๋ฐ์ํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๊ณผ๋ํ๊ฒ ํธ์ถ๋์ด ์ฑ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
- ๋๋ฐ์ด์ค์ ์ค๋กํ์ ์งง์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ฐ์ํด์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํํด์ ๊ณผ๋ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ํธ์ถ์ ๋ฐฉ์งํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
๋๋ฐ์ด์ค (debounce
)
- ์งง์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ฐ์ํด์ ๋ฐ์ํ๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ์ง ์๋ค๊ฐ ์ผ์ ์๊ฐ์ด ๊ฒฝ๊ณผํ ์ดํ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํ ๋ฒ๋ง ํธ์ถ ๋๋๋ก ํ๋ค.
์ฆ, ๋๋ฐ์ฐ์ค๋ ์งง์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํ ํด์ ๋ง์ง๋ง์ ํ ๋ฒ๋ง ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํธ์ถ๋๋๋ก ํ๋ค.
- ๊ตฌํ ์์
| const debounce = (callback, delay) => { |
| let timerId; |
| |
| return event => { |
| |
| |
| |
| if (timerId) clearTimeout(timerId); |
| timerId = setTimeout(callback, delay, event); |
| }; |
| }; |
resize
์ด๋ฒคํธ ์ฒ๋ฆฌ, ์
๋ ฅ ๊ฐ์ผ๋ก ajax
์์ฒญ, ๋ฒํผ ์ฃผ์ค๋ณต ํด๋ฆญ ๋ฐฉ์ง ๋ฑ ํ์ฉ ๊ฐ๋ฅ
์ค๋กํ (throttle
)
- ์งง์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ฐ์ํด์ ๋ฐ์ํ๋๋ผ๋ ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ต๋ ํ ๋ฒ๋ง ํธ์ถ๋๋๋ก ํ๋ค.
์ฆ, ์ผ์ ์๊ฐ๋จ ๋จ์๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํธ์ถ ๋๋๋ก ํธ์ถ ์ฃผ๊ธฐ๋ฅผ ๋ง๋๋ ๊ฒ
- ๊ตฌํ ์์
| const throttle = (callback, delay) => { |
| let timerId; |
| |
| return event => { |
| |
| |
| |
| if (timerId) return; |
| timerId = setTimeout(() => { |
| callback(event); |
| timerId = null; |
| }, delay, event); |
| }; |
| }; |
scroll
์ด๋ฒคํธ ์ฒ๋ฆฌ๋, ๋ฌดํ ์คํฌ๋กค ๊ตฌํ์ ์ฌ์ฉ
๋๋ฐ์ด์ค ๋ ์ค๋กํ์ ์ค์ ๋ก ๊ตฌํํ๊ธฐ ๋ณด๋ค๋ Underscore
๋ Lodash
์์ ์ ๊ณตํ๋ ํจ์๋ฅผ ์ฌ์ฉ ํจ
๋๊ธ