[JS] requestAnimationFrame

J.yeonΒ·2024λ…„ 3μ›” 23일

requestAnimationFrame ν•¨μˆ˜λž€?

μ›Ή μ• λ‹ˆλ©”μ΄μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” JavaScript의 λ©”μ„œλ“œλ‘œ, λΈŒλΌμš°μ €μ— μ• λ‹ˆλ©”μ΄μ…˜ μˆ˜ν–‰μ„ μš”μ²­ν•˜κ³  λ‹€μŒ λ¦¬νŽ˜μΈνŠΈκ°€ λ°œμƒν•˜κΈ° 직전에 μ§€μ •λœ 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ 이λ₯Ό 톡해 λΈŒλΌμš°μ €κ°€ μ΅œμ ν™”λœ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.


μ˜ˆμ „μ—λŠ” νƒ€μ΄λ¨Έν•¨μˆ˜μΈ setInterval(), setTimeout() 을 μ‚¬μš©ν•˜μ—¬ λ¬΄ν•œ 반볡으둜 μ• λ‹ˆλ©”μ΄μ…˜μ„ λ§Œλ“€μ—ˆλ‹€λ©΄,
requestAnimationFrame() λŠ” νƒ€μ΄λ¨Έν•¨μˆ˜κ°€ κ°€μ§„ 단점듀을 λ³΄μ™„ν•΄μ„œ λ‚˜μ˜¨ ν•¨μˆ˜λΌκ³  λ³Ό 수 μžˆλ‹€.




타이머 ν•¨μˆ˜μ˜ 단점?

ν”„λ ˆμž„μ„ 무쑰건 λ§žμΆ°μ€€λ‹€λŠ” 보μž₯이 μ—†κΈ°λ•Œλ¬Έμ— λΈŒλΌμš°μ €κ°€ 지연될 μ‹œ ν”„λ ˆμž„μ΄ μ–΄κΈ‹λ‚˜ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ²„λ²…μ΄κ²Œ λ˜λŠ” λ¬Έμ œκ°€ μžˆλ‹€κ³  ν•œλ‹€.πŸ€”

이λ₯Ό λŒ€μ‹ ν•˜μ—¬ ν”„λ ˆμž„ μ‹œμž‘μ— 맞좰 싀행될 수 있게 보μž₯λ˜λŠ” requestAnimationFrame ν•¨μˆ˜κ°€ λ‚˜μ˜¨ 것이닀.πŸ‘


requestAnimationFrame ν•¨μˆ˜μ˜ μž₯점?

🟒 μ„±λŠ₯ μ΅œμ ν™”

λΈŒλΌμš°μ €κ°€ λ‹€μŒ 리페인트λ₯Ό μ§„ν–‰ν•˜κΈ° 전에 ν˜ΈμΆœλ˜λ―€λ‘œ, μ• λ‹ˆλ©”μ΄μ…˜μ„ λΈŒλΌμš°μ €μ˜ 리페인트 주기에 맞좰 μ΅œμ ν™”λœ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλ‹€. 이λ₯Ό 톡해 λΆ€λ“œλŸ¬μš΄ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ œκ³΅ν•  수 있고, λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€ μ†Œλͺ¨λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€.

🟒 μžμ› μ ˆμ•½

μ• λ‹ˆλ©”μ΄μ…˜μ΄ 화면에 ν‘œμ‹œλ˜λŠ” λ™μ•ˆμ—λ§Œ ν˜ΈμΆœλ˜κΈ°λ•Œλ¬Έμ— 화면에 보이지 μ•ŠλŠ” κ²½μš°μ—λŠ” μžμ›μ„ μ†ŒλΉ„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, μ „λ ₯ μ†ŒλΉ„λ₯Ό 쀄이고 배터리 수λͺ…을 μ—°μž₯ν•  수 μžˆλ‹€.

🟒 타이밍 μ œμ–΄

자체적으둜 호좜 μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•˜λ―€λ‘œ, μ• λ‹ˆλ©”μ΄μ…˜μ˜ 타이밍을 λΈŒλΌμš°μ €κ°€ μ œμ–΄ν•˜κ²Œ λœλ‹€. μ΄λŠ” 일반적으둜 고해상도 λ””μŠ€ν”Œλ ˆμ΄λ‚˜ λ‹€μ–‘ν•œ μž₯μΉ˜μ—μ„œ μΌκ΄€λœ μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό 얻을 수 μžˆλ„λ‘ λ•λŠ”λ‹€.


μš”μ•½: μ›Ή μ• λ‹ˆλ©”μ΄μ…˜μ„ μ΅œμ ν™”ν•˜κ³  λΈŒλΌμš°μ €μ˜ 리페인트 주기에 맞좰 μ²˜λ¦¬ν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.


requestAnimationFrame ν•¨μˆ˜ μ‚¬μš©λ²•

const animation = () => {
  // 슀크립트
  
  requestAnimationFrame(animation) 
  // ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ‹€μ‹œ ν˜ΈμΆœν•˜μ—¬ 반볡
}
requestAnimationFrame(animation);


/* μ·¨μ†Œ ν•¨μˆ˜ */
cancelAnimationFrame(animation);


μ°Έκ³ πŸ™: 1λΆ„μ½”λ”© & Inpaλ‹˜

profile
λ‚˜ν˜Όμžλ§Œ μœˆλ„μš°UPπŸ’»

0개의 λŒ“κΈ€