CSS ๋ชจ์ ํจ์ค์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ด ์ข ํฉ ๊ฐ์ด๋์ ํจ๊ป ์ต์ ํํ์ธ์. ๋ชจ๋ ์ฅ์น์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ถ๋๋ฝ๊ณ ํจ์จ์ ์ธ ์ ๋๋ฉ์ด์ ์ ๋ง๋๋ ๊ธฐ์ ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์ฐ์ธ์.
CSS ๋ชจ์ ํจ์ค ์ฑ๋ฅ ์์ง: ๊ฒฝ๋ก ์ ๋๋ฉ์ด์ ์ต์ ํ ๋ง์คํฐํ๊ธฐ
CSS ๋ชจ์ ํจ์ค๋ ๋งค๋ ฅ์ ์ด๊ณ ๋์ ์ธ ์น ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํ ํฅ๋ฏธ๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. ๊ทธ๋ฌ๋ ์ ๋๋ก ์ต์ ํ๋์ง ์์ ๊ฒฝ๋ก ์ ๋๋ฉ์ด์ ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผ์ผ ๋๊น ํ์๊ณผ ๋ถํธํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ๋ค์ํ ์ฅ์น์ ๋ธ๋ผ์ฐ์ ์์ ์ํํ๊ณ ํจ์จ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ ์ต์ ํํ๋ ๋ณต์กํ ๊ณผ์ ์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค.
CSS ๋ชจ์ ํจ์ค ์ดํดํ๊ธฐ
์ต์ ํ ๊ธฐ์ ์ ๋ฐ์ด๋ค๊ธฐ ์ ์ CSS ๋ชจ์ ํจ์ค๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋ตํ๊ฒ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ง์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์์๋ฅผ ์ ๋๋ฉ์ด์ ํํ ์ ์์ด ๊ธฐ์กด CSS ์ ํ ๋ฐ ์ ๋๋ฉ์ด์ ๋ณด๋ค ์์ง์์ ๋ํ ๋ ํฐ ์ ์ด๊ถ์ ์ ๊ณตํฉ๋๋ค. SVG ๊ฒฝ๋ก ๋ฐ์ดํฐ, CSS ์ ฐ์ดํ ๋๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐํํ์ ์์ ๋ํ์ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ฃผ์ CSS ์์ฑ
offset-path
: ์์๋ฅผ ์ ๋๋ฉ์ด์ ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.offset-distance
: ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์์์ ์์น๋ฅผ ์ ์ํฉ๋๋ค (0%์์ 100%๊น์ง).offset-rotate
: ์์๊ฐ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋ํ ๋ ํ์ ์ ์ ์ดํฉ๋๋ค.offset-anchor
: ๊ฒฝ๋ก์ ์ ๋ ฌ๋๋ ์์์ ์ง์ ์ ๊ฒฐ์ ํฉ๋๋ค.
์ด๋ฌํ ์์ฑ์ CSS ์ ํ ๋๋ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฒฐํฉ๋์ด ๋ณต์กํ๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค.
์ฑ๋ฅ ์ต์ ํ์ ์ค์์ฑ
์ฑ๋ฅ์ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๋๋ฆฐ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ์ ์ฐธ์ฌ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๊ณ ์น์ฌ์ดํธ์ ํํ์ ์์์ํฌ ์๋ ์์ต๋๋ค. CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ต์ ํ๊ฐ ์ค์ํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ๋์ด๊ณ ๋ ์ฆ๊ฑฐ์ด ๋ธ๋ผ์ฐ์ง ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- CPU ์ฌ์ฉ๋ ๊ฐ์: ์ต์ ํ๋ ์ ๋๋ฉ์ด์ ์ CPU ๋ฆฌ์์ค๋ฅผ ๋ ์๋นํ์ฌ ๋ชจ๋ฐ์ผ ์ฅ์น์์ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์ฐ์ฅํ๊ณ ์ ๋ฐ์ ์ธ ์์คํ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ ๋น ๋ฅธ ํ์ด์ง ๋ก๋ ์๊ฐ: ์ ๋๋ฉ์ด์ ์์ฒด๊ฐ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๊ฐ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง๋ ์์ง๋ง, ๋นํจ์จ์ ์ธ ์ ๋๋ฉ์ด์ ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์ง์ฐ์ํค๊ฑฐ๋ ๊ณผ๋ํ ๋ฆฌ์์ค๋ฅผ ์๋นํ์ฌ ๊ฐ์ ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๋ ๋์ SEO: ์ง์ ์ ์ธ ์์ ์์๋ ์๋์ง๋ง, ์ฌ์ฉ์ ๊ฒฝํ์ SEO์ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋ ๋น ๋ฅด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์น์ฌ์ดํธ๋ ์ดํ๋ฅ ์ด ๋ฎ๊ณ ์ฌ์ฉ์ ์ฐธ์ฌ๋๊ฐ ๋์ ๊ฒ์ ์์ง ์์์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์๋ณ
์ ๋๋ฉ์ด์ ์ ์ต์ ํํ๊ธฐ ์ ์ ์ฑ๋ฅ์ด ๋ถ์กฑํ ์์ญ์ ์๋ณํด์ผ ํฉ๋๋ค. CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ ์ผ๋ฐ์ ์ธ ๋ณ๋ชฉ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ณต์กํ ๊ฒฝ๋ก ๊ธฐํํ: ์ ์ด์ ์ด ๋ง์ ๊ฒฝ๋ก๋ ๋ ๋๋งํ๋ ๋ฐ ๋ ๋ง์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.
- ๊ณผ๋ํ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ: ํ์ด์ง ๋ ์ด์์ ๋๋ ๋ชจ์์ ๋น๋ฒํ ๋ณ๊ฒฝ์ ๋ฆฌํ๋ก์ฐ(์์ ์์น ์ฌ๊ณ์ฐ) ๋ฐ ๋ฆฌํ์ธํธ(์์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ)๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ๋๋ค.
- ํ๋์จ์ด ๊ฐ์ ๋ถ์กฑ: ํน์ CSS ์์ฑ์ ํ๋์จ์ด ๊ฐ์์ด ๋์ง ์์ GPU ๋์ CPU์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ํฐ ์์ ํฌ๊ธฐ: ํฐ ์์๋ฅผ ์ ๋๋ฉ์ด์ ํ๋ ๊ฒ์ ์์ ์์๋ฅผ ์ ๋๋ฉ์ด์ ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.
- ๋์ ์ ๋๋ฉ์ด์ : ์ฌ๋ฌ ๊ฐ์ ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ๋์์ ์คํํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
CSS ๋ชจ์ ํจ์ค ์ต์ ํ ๊ธฐ์
์ด์ CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ ์ต์ ํํ๋ ๋ค์ํ ๊ธฐ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ๊ฒฝ๋ก ๊ธฐํํ ๋จ์ํ
์๋ง์ ์ ์ด์ ์ ๊ฐ์ง ๋ณต์กํ ๊ฒฝ๋ก๋ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ํ๋ ์๊ฐ์ ํจ๊ณผ๋ฅผ ํฌ์ํ์ง ์๊ณ ์ ์ ์๋ฅผ ์ค์ฌ ๊ฒฝ๋ก ๊ธฐํํ์ ๋จ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. SVG ์ตํฐ๋ง์ด์ ์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์์: ๋งค์ฐ ์์ธํ SVG ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๋์ , ๋ ์ ์ ๋ฒ ์ง์ ๊ณก์ ๋๋ ์ฌ์ง์ด ์ง์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ ๊ฐ๋จํ ๊ฒฝ๋ก๋ก ๊ทผ์ฌํํด ๋ณด์ธ์.
์ฝ๋ ์์ (๋จ์ํ๋ ๊ฒฝ๋ก):
/* Original Path (Complex) */
.element {
offset-path: path('M10,10 C20,20 40,20 50,10 C60,0 80,0 90,10');
}
/* Optimized Path (Simplified) */
.element {
offset-path: path('M10,10 Q50,20 90,10');
}
2. ํ๋์จ์ด ๊ฐ์ ํ์ฉ
ํ๋์จ์ด ๊ฐ์์ GPU(๊ทธ๋ํฝ ์ฒ๋ฆฌ ์ฅ์น)๋ฅผ ํ์ฉํ์ฌ ๋ ๋๋ง ์์ ์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ๋ค์ CSS ์์ฑ์ ํ๋์จ์ด ๊ฐ์์ ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค:
transform
(translate, rotate, scale)opacity
filter
will-change
์์: ์์๋ฅผ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋์ํค๊ธฐ ์ํด left
๋ฐ top
์์ฑ์ ์ ๋๋ฉ์ด์
ํ๋ ๋์ , offset-path
๋ฐ offset-distance
์ ๊ฒฐํฉ๋ transform: translate()
๋ฅผ ์ฌ์ฉํ์ธ์.
์ฝ๋ ์์ (ํ๋์จ์ด ๊ฐ์):
.element {
offset-path: path('M10,10 C20,20 40,20 50,10 C60,0 80,0 90,10');
offset-distance: 0%;
transition: offset-distance 1s linear;
will-change: offset-distance, transform;
}
.element.animated {
offset-distance: 100%;
}
์ค๋ช
: will-change
์์ฑ์ ๋ธ๋ผ์ฐ์ ์๊ฒ offset-distance
๋ฐ transform
์์ฑ์ด ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์์์ ์๋ ค ํ๋์จ์ด ๊ฐ์์ ์ํ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๋๋ก ์ ๋ํฉ๋๋ค. transform: translate()
(์คํ์
์์ฑ๊ณผ ํจ๊ป ์์์ ์ผ๋ก ์ฌ์ฉ๋จ)๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ์์น๊ฐ GPU๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ฐ์ดํธ๋ฉ๋๋ค.
3. ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ ์ต์ํ
๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ๋๋ค. ์ ๋ฐ์ดํธ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๊ณ ๋ ์ด์์ ๋ณ๊ฒฝ์ ์ต์ํํ์ฌ ๋ถํ์ํ๊ฒ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ์ ํผํ์ธ์.
- ๋ฆฌํ๋ก์ฐ๋ฅผ ์ ๋ฐํ๋ ์์ฑ ์ ๋๋ฉ์ด์
ํผํ๊ธฐ:
width
,height
,margin
๊ณผ ๊ฐ์ ์์ฑ์ ๋ฆฌํ๋ก์ฐ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.width
๋ฐheight
๋ฅผ ์ง์ ์ ๋๋ฉ์ด์ ํ๋ ๋์transform: scale()
์ ์ฌ์ฉํ์ธ์. - CSS ๋ณ๊ฒฝ ์ฌํญ ์ผ๊ด ์ฒ๋ฆฌ: ์ฌ๋ฌ CSS ๋ณ๊ฒฝ ์ฌํญ์ ํจ๊ป ๋ฌถ์ด ๊ฐ๋ณ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋์ ํ ๋ฒ์ ์ ์ฉํ์ธ์.
- CSS ๋ณ์ ์ฌ์ฉ: CSS ๋ณ์๋ ์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ ์คํ์ผ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ์ฌ ๋ฆฌํ๋ก์ฐ ๋ฐ ๋ฆฌํ์ธํธ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค.
4. ์ด๋ฏธ์ง ๋ฐ ์์ฐ ๋ก๋ฉ ์ต์ ํ
์ ๋๋ฉ์ด์ ์ ์ด๋ฏธ์ง๋ ๊ธฐํ ์์ฐ์ด ํฌํจ๋ ๊ฒฝ์ฐ, ์น์ ์ต์ ํ๋์ด ์๋์ง ํ์ธํ์ธ์. ํฌ๊ณ ์ต์ ํ๋์ง ์์ ์ด๋ฏธ์ง๋ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋ฆ์ถ๊ณ ์ ๋๋ฉ์ด์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ์ต์ ํ๋ ์ด๋ฏธ์ง ํ์ ์ฌ์ฉ: ์ด๋ฏธ์ง ์ฝํ ์ธ ๋ฐ ์์ถ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ์ด๋ฏธ์ง ํ์(JPEG, PNG, WebP)์ ์ ํํ์ธ์.
- ์ด๋ฏธ์ง ์์ถ: ์ด๋ฏธ์ง ์์ถ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ์ ํ์ง์ ํฌ์ํ์ง ์๊ณ ์ด๋ฏธ์ง ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด์ธ์.
- ์ง์ฐ ๋ก๋ฉ ์ฌ์ฉ: ๋ทฐํฌํธ์ ํ์๋ ๋๋ง ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ์ฌ ์ด๊ธฐ ํ์ด์ง ๋ก๋ ์๊ฐ์ ์ค์ ๋๋ค.
- ์์ฐ ์บ์: ๋ธ๋ผ์ฐ์ ์บ์ฑ์ ํ์ฉํ์ฌ ์์ฐ์ ๋ก์ปฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋ฐ๋ณต์ ์ผ๋ก ๋ค์ด๋ก๋ํ ํ์๋ฅผ ์ค์ ๋๋ค.
5. ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋๋ฐ์ด์ค ๋ฐ ์ค๋กํ
์ ๋๋ฉ์ด์ ์ด ์ฌ์ฉ์ ์ํธ ์์ฉ ๋๋ ์ด๋ฒคํธ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋๋ฐ์ด์คํ๊ฑฐ๋ ์ค๋กํํ์ฌ ๋๋ฌด ์์ฃผ ๋ฐ์ํ์ง ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง ๋ถํ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋๋ฐ์ด์ฑ: ํจ์๊ฐ ๋ง์ง๋ง์ผ๋ก ํธ์ถ๋ ํ ํน์ ์๊ฐ์ด ๊ฒฝ๊ณผํ ๋๊น์ง ํจ์์ ์คํ์ ์ง์ฐ์ํต๋๋ค.
- ์ค๋กํ๋ง: ํจ์๊ฐ ์คํ๋ ์ ์๋ ์๋๋ฅผ ์ ํํฉ๋๋ค.
์์ (์ค๋กํ๋ง):
function throttle(func, delay) {
let timeoutId;
let lastExec = 0;
return function(...args) {
const now = Date.now();
if (now - lastExec >= delay) {
func.apply(this, args);
lastExec = now;
} else if (!timeoutId) {
timeoutId = setTimeout(() => {
func.apply(this, args);
lastExec = Date.now();
timeoutId = null;
}, delay - (now - lastExec));
}
};
}
// Example Usage: Assume 'myAnimationFunction' is your animation trigger
window.addEventListener('scroll', throttle(myAnimationFunction, 100)); // Throttle to 100ms
6. ๊ฐ๋ฅํ ๊ฒฝ์ฐ JavaScript ์ ๋๋ฉ์ด์ ๋์ CSS ์ ๋๋ฉ์ด์ ์ฌ์ฉ
CSS ์ ๋๋ฉ์ด์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋ฎ์ ์์ค์์ ์ต์ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก JavaScript ๊ธฐ๋ฐ ์ ๋๋ฉ์ด์ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ ์ข์ต๋๋ค. JavaScript๋ ๋ ๋ง์ ์ ์ฐ์ฑ๊ณผ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋์ ๊ณ์ฐ์ด ํ์ ์๋ ๊ฐ๋จํ๊ฑฐ๋ ์ค๊ฐ ์ ๋์ ๋ณต์กํ ์ ๋๋ฉ์ด์ ์๋ CSS ์ ๋๋ฉ์ด์ ์ด ๋ ๋์ ์ ํ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด์ : CSS ์ ๋๋ฉ์ด์ ์ ์ข ์ข ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์ํด ์ง์ ์ฒ๋ฆฌ๋์ด ํ๋์จ์ด ๊ฐ์์ ๋ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํฉ๋๋ค. ๋ฐ๋ฉด JavaScript ์ ๋๋ฉ์ด์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ ํ๋ ์์์ JavaScript ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋ฏ๋ก ๋ฆฌ์์ค ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค.
7. will-change
์ฌ์ฉ์ ์ ์ค์ ๊ธฐํ์ธ์.
will-change
๋ ๋ธ๋ผ์ฐ์ ์ ์ด๋ค ์์ฑ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ธ์ง ํํธ๋ฅผ ์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ *ํด๋ก์ธ* ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์กฐ๊ธฐ์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก: will-change
๋ ์ ๋๋ฉ์ด์
๋ ์์์๋ง ์ฌ์ฉํ๊ณ ์ ๋๋ฉ์ด์
์ด ์๋ฃ๋๋ฉด ์ ๊ฑฐํ์ธ์. ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ(ํธ๋ฒ, ํฌ์ปค์ค, ํน์ ์ง์ ์ ๊ฐ๊น์์ง๋ ์คํฌ๋กค ๋ฑ)์ ๋ฐ๋ผ will-change
๊ฐ ํฌํจ๋ ํด๋์ค๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
8. ์ฑ๋ฅ ํ๋กํ์ผ๋ง ๋ฐ ์ธก์
์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ์ ํ๋กํ์ผ๋งํ๊ณ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค. Chrome DevTools, Firefox Developer Tools ๋ฐ ๊ธฐํ ๋ธ๋ผ์ฐ์ ๋๊ตฌ๋ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์๋น ๋ฐ ๋ ๋๋ง ์ฑ๋ฅ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
- Chrome DevTools: Performance ํจ๋์ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ํ์๋ผ์ธ์ ๊ธฐ๋กํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์๋นํ๋ ์์ญ์ ์๋ณํ์ธ์. ๊ธด ํ์ธํธ ์๊ฐ, ๊ณผ๋ํ ์คํฌ๋ฆฝํ ๋๋ ๋ ์ด์์ ์ค๋์ฑ์ ์ฐพ์๋ณด์ธ์.
- Firefox Developer Tools: Chrome DevTools์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ ๋๋ฉ์ด์ ์ฑ๋ฅ์ ํ๋กํ์ผ๋งํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค.
- WebPageTest: ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น์์ ์น์ฌ์ดํธ ์ฑ๋ฅ์ ํ ์คํธํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ๋ก, ํ์ด์ง ๋ก๋ ์๊ฐ ๋ฐ ๋ ๋๋ง ์ฑ๋ฅ์ ๋ํ ์์ธํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ต์ ํ๋ CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์์
์ด์ ์ต์ ํ๋ CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ ๋ช ๊ฐ์ง ์ค์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์์ 1: ์ ๋๋ฉ์ด์ ๋ก๊ณ ๊ณต๊ฐ
๊ณก์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ํ์ฌ ๋ก๊ณ ๋ฅผ ๊ณต๊ฐํ๋ ์ ๋๋ฉ์ด์ ์ ์์ํด ๋ณด์ธ์. ์ด ์ ๋๋ฉ์ด์ ์ ์ต์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ๋ก๊ณ ์ SVG ๊ฒฝ๋ก๋ฅผ ๋จ์ํํ์ฌ ์ ์ด์ ์๋ฅผ ์ค์ ๋๋ค.
transform: translate()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ณ ๋ฅผ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋์ํค๊ณ ํ๋์จ์ด ๊ฐ์์ ํ์ฉํฉ๋๋ค.- ์ ๋๋ฉ์ด์ ์ค ์ง์ฐ์ ํผํ๊ธฐ ์ํด ๋ก๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค.
์์ 2: ์คํฌ๋กค ๊ธฐ๋ฐ ์ธํฐ๋ํฐ๋ธ ์ ๋๋ฉ์ด์
์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ ๋ ์งํ๋๋ ์ ๋๋ฉ์ด์ ์ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. ์ด ์ ๋๋ฉ์ด์ ์ ์ต์ ํํ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ์คํฌ๋กค ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ค๋กํํ์ฌ ๋๋ฌด ์์ฃผ ๋ฐ์ํ์ง ์๋๋ก ํฉ๋๋ค.
- ์คํฌ๋กค ์์น์ ๋ฐ๋ผ
offset-distance
๋ฅผ ์ ์ดํ๊ธฐ ์ํด CSS ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์ ๋๋ฉ์ด์
์ด ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง
will-change
๋ฅผ ์ ์คํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
์ ์ญ์ ์ธ ๊ณ ๋ ค ์ฌํญ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋ค์ ์ฌํญ์ ์ผ๋์ ๋์ธ์:
- ์ฅ์น ๋ค์์ฑ: ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ ๋ฐ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๊ฐ์ง ์ฌ๋ฌ ์ฅ์น์์ ์ ๋๋ฉ์ด์ ์ ํ ์คํธํ์ธ์.
- ๋คํธ์ํฌ ์กฐ๊ฑด: ์ ํ๋ ๋์ญํญ์ ๊ฐ์ง ์ง์ญ์ ์ฌ์ฉ์์๊ฒ ์ํํ ๊ฒฝํ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ง๊ฒ ์์ฐ์ ์ต์ ํํ์ธ์. ์ ์ํ ๋ก๋ฉ ์ ๋ต์ ๊ณ ๋ คํ์ธ์.
- ์ ๊ทผ์ฑ: ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ ๋๋ฉ์ด์ ์ผ๋ก ์ ๊ณต๋๋ ์ฝํ ์ธ ์ ์ ๊ทผํ ์ ์๋ ๋์ฒด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ธ์. ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ฏธ๋ก ์ ์๋ฏธ๋ฅผ ํฅ์์ํค์ธ์.
- ์ง์ญํ: ์ ๋๋ฉ์ด์ ์ ํ ์คํธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ์ธ์ด์ ๋ง๊ฒ ์ ๋๋ก ์ง์ญํ๋์๋์ง ํ์ธํ์ธ์.
๊ฒฐ๋ก
CSS ๋ชจ์ ํจ์ค ์ ๋๋ฉ์ด์ ์ต์ ํ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์น ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ํ์์ ์ ๋๋ค. ๋ ๋๋ง์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๊ธฐ์ ์ ์ ์ฉํจ์ผ๋ก์จ ์ ๋๋ฉ์ด์ ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ถ๋๋ฝ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋๋ฉ์ด์ ์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ์ธก์ ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์ฉํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋จ๊ณ ๋ ๋ฐ์ ์ํค๋ ๋งค๋ ฅ์ ์ด๊ณ ๊ณ ์ฑ๋ฅ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.