elice/study

[CS] CSS์™€ JS ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ฐจ์ด์ 

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