์ธ์์ ๋๊ณ ์์ง ๊ฐ๊ธธ์ด ๋ฉ~~~~~~๋ค๋ ๊ฒ์^^,, #ํ์ง๋ง #๊ฐ๋ณด์๊ณ
๐ค requestAnimationFrame?
์๋ฐ์คํฌ๋ฆฝํธ์ webAPI์ ์๋ ๋น๋๊ธฐ ํจ์
๋ธ๋ผ์ฐ์ ์๊ฒ ์ํํ๊ธฐ๋ฅผ ์ํ๋ ์ ๋๋ฉ์ด์ ์ ์๋ฆฌ๊ณ , ๋ค์ ๋ฆฌํ์ธํธ๊ฐ ์งํ๋๊ธฐ ์ ํด๋น ์ ๋๋ฉ์ด์ ์ ์ ๋ฐ์ดํธํ๋ ํจ์๋ฅผ ํธ์ถํ๊ฒ ํจ. ๋ฆฌํ์ธํธ ์ด์ ์ ์คํํ ์ฝ๋ฐฑ์ ์ธ์๋ก ๋ฐ์. ๋ฆฌํด๊ฐ์ ์ฝ๋ฐฑ ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ ์ํ๋ ๊ณ ์ ํ ์์ฒญ id์ธ long ์ ์ ๊ฐ. (MDN ์ฐธ๊ณ )
์ด๊ฑธ ์ ์ฐ๋๊ฑฐ์ง?
- ์ ๋๋ฉ์ด์ ์ ์ํด ๋ง๋ค์ด์ง ""๋น๋๊ธฐ""ํจ์
- ์ฑ๋ฅ ์ต์ ํ (๋ฐฑ๊ทธ๋ผ์ด๋ ๋์ ๋ฐ ๋นํ์ฑํ ์ ์ค์ง)
- ์ต๋ 1ms๋ก ์ ํ๋๋ฉฐ, 1์ด์ 60๋ฒ ๋์
- ๋ค์์ ์ ๋๋ฉ์ด์ ๋ ๊ฐ๊ฐ ํ์ด๋จธ๊ฐ์ ์์ฑ ๋ฐ ์ฐธ์กฐํ์ง ์๊ณ , ๋ด๋ถ์ ๋์ผํ ํ์ด๋จธ๋ฅผ ์ฐธ์กฐํจ
requesetAnimationFrame
์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋๋์ด๋ค! (์ฉ๋์ ๋ฎ์ถ๋ ค ํ๋๋ ํ์ง์ด ์ข ์์ข์ ๊ฒ ๊ฐ์ง๋ง ์ ์จ ๋ฌด์ํด๋ณธ๋ค...)
const startBtn = document.getElementById("startBtn");
const stopBtn = document.getElementById("stopBtn");
const count = document.getElementById("count");
let cnt = 0;
let isCounting;
function countUp() {
count.innerText = cnt;
cnt++;
isCounting = requestAnimationFrame(countUp);
}
function handleStart() {
countUp();
}
function handleStop() {
cancelAnimationFrame(isCounting);
}
startBtn.addEventListener("click", handleStart);
stopBtn.addEventListener("click", handleStop);
๋ฐ๋ณต ํธ์ถํ ํจ์ countUp
์ requestAnimationFrame( ์ฌ๊ธฐ!! )์ ์ธ์๋ก ๋๊ฒจ์ฃผ์ด ์ฌ๊ท์ ์ผ๋ก ์คํํ๋ค.
ํน์ ํ ๋ถ๊ธฐ๋ฌธ์ด ์๋ค๋ฉด ์๋ง ํ์ ๋์ํ ๊ฒ์ด๋ค.
๋ฉ์ถ๋ ๋ฐฉ๋ฒ์ requestAnimationFrame
์ ๋ณ์๋ก ์ ์ฅํ์ฌ cancelAnimationFrame
์ ๋๊ฒจ์ค๋ค.
๐ค setInterval๊ณผ ๋น์ทํ์ง ์๋?
๋ฉ์ง๊ฒ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ฐ๊ฒฌํด์ ์ฐธ๊ณ ํ์ฌ ๊ธ์ ์์ฑํ๋ค.
- 1์ด์ 60ํ๋ ์ === 1ํ๋ ์์ 16.6ms ์ ๋ ์์
- ์ ๋๋ฉ์ด์
์ฝ๋๊ฐ ๋ณต์กํ๊ณ ์ค๋๊ฑธ๋ ค์ ์คํํ๋๋ฐ์ 16.6ms๋ณด๋ค ๋ ๊ฑธ๋ฆฌ๋ฉด?
→ ์ ํด์ง ์๊ฐ ๋ด์ ํ๋ ์์ ์ฐ์ด๋ด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๋ ๋๊ธฐ๋ฏ์ด ๋ณด์ด๊ฒ ๋๋ค.
์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ํ ํ๋ ์๋น 16ms๊ฐ ์ฃผ์ด์ง๋๋ฐ, setTimeout
์ด ์ฝ 8ms์ฏค์ ์์์ด ๋๋ค.
์ ๋ ๊ฒ ์๊ฐ์ ์ด๊ณผํ๊ฒ ๋๋ฉด ํ๋ ์์ด ์์ฑ๋์ง ๋ชปํ๊ณ ๋๋ฝ๋ ์ฑ ๋์ด๊ฐ๊ฒ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์, ๋ฌด๊ฑฐ์ด ์์ ์ ๊ณ์ ๋๋ฆฌ๊ฒ ๋๋ฉด ํ๋ ์์ด ๋๋ฝ๋ ํ๋ฅ ์ด ๋ ๋์์ง๋ค. (setTimeout, setInterval์ ํ๋ ์์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. ๋๋ ๋์ ๊ธธ์ ๊ฐ๋ค)
๊ทธ๋ฆฌ๊ณ CPU๋ ๊ทธ๋ํฝ์นด๋๊ฐ ๋๋ฆฌ๋ฉด ์ธํฐ๋ฒ์ด ๋ ๋๋ ค์ง ์ ๋ ์๋ค๊ณ ํ๋ค!
์์์๋ ๋์จ ์๊ธฐ์ด์ง๋ง, setTimeout
์ด๋ setInterval
์ ๋ณด์ด์ง ์๋ ๊ณณ์์๋ ์ํ ๋์ง๋ง,
RAF
๋ ํ์ฌ ์ฐฝ์ ํ์๋์ง ์์ผ๋ฉด ์ ๋๋ฉ์ด์
์ ์ค์งํด์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค. (์ต์ ํ)
๐์ฐธ๊ณ (๊ฐ์ฌํฉ๋๋ค)
'๐๊ณต๋ถ > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Callback vs Promise vs async-await (0) | 2021.10.10 |
---|---|
[JavaScript] ํ์ดํํจ์ vs ์ผ๋ฐํจ์ (0) | 2021.10.09 |
[JavaScript] Babel (0) | 2021.09.25 |
[JavaScript] ์ด๋ฒคํธ ์์(Event delegation) (0) | 2021.09.23 |
[JavaScript] ์ด๋ฒคํธ ์บก์ณ๋ง(Event Capturing) (0) | 2021.09.23 |
๋๊ธ