1. CSS ์ ๋๋ฉ์ด์ vs JS ์ ๋๋ฉ์ด์
์น์ฌ์ดํธ์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ๋ถ์ฌํ ๋ CSS์ transiton / animation ์์ฑ์ ์ฌ์ฉํ ์ ์๊ณ , JS์ setInterval() / requestAnimationFrame() ์ ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ๊ฐ๊ฐ์ ์ฌ์ฉํ ๋์ ํน์ง์ด ๋ค๋ฅด๊ณ ์ฅ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ์์๋๋ ๊ฒ์ด ์ข๋ค.
๊ธฐ์ ๋ฉด์ ์๋ ๋์จ์ ์ด ์๋ค.
2. CSS ์ ๋๋ฉ์ด์
์ผ๋ฐ์ ์ผ๋ก, ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋ ํน์ ๋ฉ๋ด ๋ฒํผ์ ์ ํ๊ณผ ๊ฐ์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ๋ ์ ๋๋ฉ์ด์ ์ ๊ฒฝ์ฐ CSS๋ก ์ฒ๋ฆฌํ๋ค.
์๋ฅผ ๋ค์ด, 200 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ ์ผ์ชฝ ์์์ ์ค๋ฅธ์ชฝ ์๋๋ก 350px ์์ง์ด๊ฒ ํ๋ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ค๊ณ ํ๋ฉด, transform์ translate๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฅผ JS๋ก ๊ตฌํํ๊ธฐ ์ํด์ setInterval์ ํตํด์ ๊ณ์ํด์ style.top๊ณผ style.left ์์ฑ์ ๋ณํ์์ผ์ค์ผ ํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ด ์์ฑ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์์ reflow(layout) ๋จ๊ณ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์, ์ ๋๋ฉ์ด์ ์ด ๋ถ์์ฐ์ค๋ฝ๊ฒ ๋๊ธฐ๋ ๋ฏํ ๋๋์ ๋ฐ๊ฒ ๋๋ค.
์ด๋ฐ ์ ์์ ๋ฐ๋๋ผ JS๋ก ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค CSS๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ ์ ์๋ค.
์ด์ธ์๋ ๋ค์ํ ์ฅ์ ๋ค์ด ์์ผ๋ฉฐ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฐ์ํ์ผ๋ก ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๊ธฐ์ ์ ์ฉํ๋ฐ, ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ก ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๋ฉด ๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์๋ก ํ์ง ์๋๋ค.
- CSS ์์ฒด๊ฐ ์ ์ธํ(declarative)์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค ์์๊ฐ ์ ๋๋ฉ์ด์ ์ ๊ฐ์ ธ์ผ ํ๋ค๋ ์ง๊ด์ ์ธ ํํ์ด ๊ฐ๋ฅํ๋ค.
- ๋ฉ์ธ ์ฐ๋ ๋๊ฐ ์๋ ๋ณ๋์ ์ปดํฌ์งํฐ ์ฐ๋ ๋(Compositor Thread)์์ ๊ทธ๋ ค์ง๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ ์ฐ๋ ๋์์ ์์ ํ๋ JS๋ณด๋ค ํจ์จ์ ์ด๋ค.
3. JS ์ ๋๋ฉ์ด์
CSS๋ก ์ฒ๋ฆฌํ๊ธฐ์๋ ํจ์ฌ ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์ด ์ ๋๋ฉ์ด์ ์์ ๋ค์ ํจ์จ์ ์ด๊ณ , ์ธ๋ฐํ๊ฒ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ฐ๋๋ผ JS๋ก ๊ตฌํํ ๊ฒฝ์ฐ ์์์ ์ดํด๋ณธ ๋ฐ์ ๊ฐ์ด ๊ณ์ํด์ ์์์ ์์น๋ฅผ ์ฌ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ฉฐ ์ฌ์ฉ์ ๋์ ๊ฐ์ฅ ๋ถ๋๋ฌ์ด 60fps๊ฐ ์ ์ง๋์ง ์๋๋ค.
์ด ๋๋ฌธ์ RAF(Request Animation Frame) API๊ฐ ๋ฑ์ฅํ๊ณ , ๊ตฌํ๋ฐฉ์์ ๋์ผํ์ง๋ง 60fps๋ฅผ ๋ณด์ฅํ ์ ์๊ฒ ๋์๋ค.
์ต๊ทผ์ Web Animations API๊ฐ ๋์ค๊ธฐ๋ ํ๋๋ฐ, ํ์ฌ(2020๋ 4์ 28์ผ) ๊ธฐ์ค์ผ๋ก ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ ํ ์ ๊ธฐ ๋๋ฌธ์ ์์ง๊น์ง ๊ธฐ์กด์ ๋ฐฉ๋ฒ๋ค์ด ๋ ๋์ ์์ฐ์ฑ์ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
๋ณดํต ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ๋ ค๊ณ ํ๋ฉด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ ๋ฐ ์ด๊ฒ์ด CSS์ ๋นํด ๊ฐ์ง๋ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์์์ ์คํ์ผ์ด ๋ณํ๋ ์๊ฐ๋ง๋ค ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋๋ฉ์ด์ ์ ์ธ๋ฐํ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํด์ง๋ค.
- GPU๋ฅผ ํตํ ํ๋์จ์ด ๊ฐ์์ ์ ์ดํ ์ ์๋ค. ์ด๋ CSS์ ํน์ ์์ฑ์ผ๋ก ์ธํ ๊ฐ์์ ๋ง์์ฃผ๋๋ฐ, ํ๋์จ์ด ๊ฐ์์ด ๋ชจ๋ฐ์ผ์์ ์ฑ๋ฅ์ ํ๋ฅผ ๋ฐ์์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๋ฉด์์ ์ข๋ค.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ ์ธก๋ฉด์์ transition / animation ์์ฑ๋ณด๋ค ๋ฐ์ด๋๋ค.
์ฐธ๊ณ
https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/frontend/css-js-animation.md
'elice > study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ์น ์๋ฒ(Web Server)์ WAS(Web Application Server) (0) | 2022.02.07 |
---|---|
[CS] DOCTYPE (0) | 2022.02.04 |
[CS] CI์ CD (0) | 2022.02.01 |
[CS] ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํธ๋์คํ์ผ๋ฌ (0) | 2022.02.01 |
[CS] BOM๊ณผ DOM (0) | 2022.01.29 |