JS

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(setTimeout, Promise then, RequestAnimationFrame)

choi95 2021. 3. 11. 14:13

setTimeout()
Promise then()

 ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ™์€ ์žฌ๊ท€ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‘ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๋‘ ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค.

setTimeout() ์‹คํ–‰ ๊ฒฐ๊ณผ
Promise then ์‹คํ–‰ ๊ฒฐ๊ณผ

 setTimeout()์œผ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ css์— ์ ์šฉ ํ•œ button:hover์˜ ์ƒ‰์ƒ๊ฐ’์ด ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋—์„ ๋•Œ ์ž˜ ํ•ด์ œ๋˜๋Š” ๋ฐ˜๋ฉด์— Promise then์œผ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋Š” ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋—์Œ์—๋„ button:hover์˜ ์ƒ‰์ƒ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ์ด๋Š” ๋‘ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ์— ์ ์žฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 setTimeout()๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ…Œ์Šคํฌ ํ์— ์ ์žฌ๋˜๋Š” ๋ฐ˜๋ฉด Promise then๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Microtask ํ์— ์ ์žฌ๋œ๋‹ค. ์ด ๋‘˜ ๋ชจ๋‘ ์ฝœ ์Šคํƒ์ด ๋น„์–ด์žˆ์„ ๋•Œ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด ์ฝœ ์Šคํƒ์— ์ ์žฌ๋œ๋‹ค๋Š” ์ ์€ ๋˜‘๊ฐ™์œผ๋‚˜ ๋‹ค์†Œ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

 ํ…Œ์Šคํฌ ํ์— ์ ์žฌ ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ฝœ ์Šคํƒ์— ์ ์žฌ๋˜์–ด ์‹คํ–‰์ด ์ข…๋ฃŒํ•˜๊ฒŒ ๋˜๋ฉด ํ…Œ์Šคํฌ ํ์— ๊ทธ ๋‹ค์Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์ ์žฌํ•ด ์žˆ๋”๋ผ๋„ ์ด๋ฅผ ์ด์–ด์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์€ ์ฑ„, ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋‹ค์‹œ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ดํ›„ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๊ณ„์† ์ˆœํ™˜ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์ผ์ •์‹œ๊ฐ„(60fps)๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๋žœ๋”๋ง ์‹œํ€€์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๊ณ  RequestAnimationFrame์— ์˜ํ•ด button:hover์˜ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ƒ๊ธด๋‹ค.

 

 ๋ฐ˜๋ฉด์—, Microtask ํ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ž์‹ ์˜ ์ €์žฅ์†Œ ๋‚ด์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์ด ๋ชจ๋‘ ๋‹ค ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋ชจ๋‘ pop ๋˜์–ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์ƒˆ๋กœ์šด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ Microtask ํ์— ์ƒˆ๋กญ๊ฒŒ ์ ์žฌ ๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด๋ฅผ ๊ณ„์† ์ฝœ ์Šคํƒ์— ์ ์žฌํ•œ๋‹ค. ์ฆ‰, Promise then์—์„œ๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆœํ™˜ ์ฐธ์กฐํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ๊ณ„์† Microtask ํ์— ๋จธ๋ฌผ๊ฒŒ ๋˜์–ด ๋žœ๋”๋ง ์‹œํ€€์Šค๋ฅผ ์ฐธ์กฐํ•  ๊ธฐํšŒ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์•„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ์ƒ‰์ƒ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค.

requestAnitmationFrame
์‹คํ–‰ ๊ฒฐ๊ณผ

 ์•ž์„œ  ์–ธ๊ธ‰ ํ•œ requestAnimationFrame ๋˜ํ•œ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด ์ฐธ์กฐ๋œ๋‹ค. ๋‹ค๋งŒ, ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด ๋งค๋ฒˆ ์ฐธ์กฐ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ์ • ์‹œ๊ฐ„์˜ ๋žœ๋”๋ง ๊ฐ„๊ฒฉ์— ๋งž์ถฐ ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š”๋ฐ, ์ด๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์ˆœํ™˜ ๋˜๋Š” ์†๋„๊ฐ€ ๋žœ๋”๋ง์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” 60fps๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 requestAnimationFrame ๋˜ํ•œ ์ž๋ฃŒ๋ฅผ ํ ๊ตฌ์กฐ๋กœ ์ €์žฅํ•œ๋‹ค. FIFO(Fisrt in First out)์ด๋ผ๋Š” ํ์˜ ํŠน์„ฑ ์ƒ style์— ์ ์šฉ ๋œ ์ˆœ์„œ๋Œ€๋กœ beige => orange => red ๊ฐ€ ๋น ์ ธ ๋‚˜๊ฐ€ ์ตœ์ข…์ ์œผ๋ก  red ์ƒ‰์ƒ์ด ๋ธŒ๋ผ์šฐ์ €์— ์ ์šฉ๋œ๋‹ค.