CSS λ·° μ ν μμ¬ μμμ μ±λ₯μ μ¬μΈ΅ λΆμνκ³ , μ ν μμμ λ λλ§ μΈ‘λ©΄, μ΅μ ν κΈ°λ², κ·Έλ¦¬κ³ λΆλλ½κ³ ν¨μ¨μ μΈ μ νμ μν λͺ¨λ² μ¬λ‘μ μ΄μ μ λ§μΆ₯λλ€.
CSS λ·° μ ν μμ¬ μμ μ±λ₯: μ ν μμ λ λλ§
CSS λ·° μ ν APIλ μΉ μ ν리μΌμ΄μ μ μ¬λ¬ μν κ°μ λΆλλ½κ³ μκ°μ μΌλ‘ λ§€λ ₯μ μΈ μ νμ μμ±νλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. κ·Έλ¬λ λ·° μ νμΌλ‘ μ΅μ μ μ±λ₯μ λ¬μ±νλ €λ©΄ μ ν μμκ° λ λλ§λλ λ°©μκ³Ό λ λλ§ λΉμ©μ μ΅μννλ λ°©λ²μ μ² μ ν μ΄ν΄ν΄μΌ ν©λλ€. μ΄ κΈμμλ μ ν μμ λ λλ§μ μ±λ₯ μΈ‘λ©΄μ κΉμ΄ νκ³ λ€μ΄, λ·° μ νμ΄ μλ¦λ΅κ³ ν¨μ¨μ μ΄λλ‘ λ³΄μ₯νκΈ° μν μ€μ©μ μΈ ν΅μ°°λ ₯κ³Ό κΈ°λ²μ μ 곡ν©λλ€.
λ·° μ ν μμ¬ μμ μ΄ν΄νκΈ°
λ·° μ ν APIλ μ ν μ€μ μμμ μ€λ μ·μ μλμΌλ‘ μΊ‘μ²νμ¬ μμ¬ μμλ‘ κ°μΈκ³ , μ΄λ₯Ό ν΅ν΄ λͺ¨μκ³Ό μμΉλ₯Ό μ λλ©μ΄μ μΌλ‘ λ§λ€ μ μμ΅λλ€. μ ν λ λλ§μ κ΄λ ¨λ μ£Όμ μμ¬ μμλ λ€μκ³Ό κ°μ΅λλ€:
- ::view-transition-group(name): λμΌν μ ν μ΄λ¦μ κ°μ§ μμλ€μ κ·Έλ£Ήννμ¬ μ νμ μν μκ°μ 컨ν μ΄λλ₯Ό λ§λλλ€.
- ::view-transition-image-pair(name): μ νμ κ΄λ ¨λ μ΄μ μ΄λ―Έμ§μ μ μ΄λ―Έμ§λ₯Ό λͺ¨λ ν¬ν¨ν©λλ€.
- ::view-transition-old(name): μμμ μ΄μ μνλ₯Ό λνλ λλ€.
- ::view-transition-new(name): μμμ μλ‘μ΄ μνλ₯Ό λνλ λλ€.
μ΄λ¬ν μμ¬ μμκ° μ΄λ»κ² λ λλ§λλμ§ μ΄ν΄νλ κ²μ μ±λ₯ μ΅μ νμ λ§€μ° μ€μν©λλ€. λΈλΌμ°μ λ μ΄λ¬ν μμλ€μ λμ μΌλ‘ μμ±νλ©°, μ΄λ€μ μκ°μ μμ±μ CSS μ λλ©μ΄μ κ³Ό μ νμ ν΅ν΄ μ μ΄λ©λλ€.
λ λλ§ νμ΄νλΌμΈκ³Ό λ·° μ ν
λ λλ§ νμ΄νλΌμΈμ λΈλΌμ°μ κ° νλ©΄μ μ½ν μΈ λ₯Ό νμνκΈ° μν΄ μννλ μ¬λ¬ λ¨κ³λ‘ ꡬμ±λ©λλ€. λ·° μ νμ΄ μ΄ νμ΄νλΌμΈκ³Ό μ΄λ»κ² μνΈ μμ©νλμ§ μ΄ν΄νλ κ²μ μ±λ₯ μ΅μ νμ νμμ μ λλ€. μ£Όμ λ¨κ³λ λ€μκ³Ό κ°μ΅λλ€:
- JavaScript:
document.startViewTransition()μ νΈμΆνμ¬ λ·° μ νμ μμν©λλ€. - Style(μ€νμΌ): λΈλΌμ°μ λ μ ν μμμ μ μ©λ CSS μ€νμΌμ κ³μ°ν©λλ€.
- Layout(λ μ΄μμ): λΈλΌμ°μ λ νμ΄μ§μ κ° μμμ μμΉμ ν¬κΈ°λ₯Ό κ²°μ ν©λλ€.
- Paint(νμΈνΈ): λΈλΌμ°μ λ μκ°μ μμλ₯Ό λΉνΈλ§΅μ΄λ λ μ΄μ΄μ 그립λλ€.
- Composite(ν©μ±): λΈλΌμ°μ λ λ μ΄μ΄λ€μ μ΅μ’ μ΄λ―Έμ§λ‘ κ²°ν©νμ¬ νμν©λλ€.
λ·° μ νμ κ° λ¨κ³, νΉν νμΈνΈ λ° ν©μ± λ¨κ³μ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€. μλ§μ μμ, 볡μ‘ν μ λλ©μ΄μ λλ λΉμ©μ΄ λ§μ΄ λλ CSS μμ±μ κ°μ§ 볡μ‘ν μ νμ λ λλ§ μκ°μ ν¬κ² μ¦κ°μν€κ³ λ²λ² 거리λ(janky) μ λλ©μ΄μ μ μ λ°ν μ μμ΅λλ€.
μ ν μμ λ λλ§ μ±λ₯μ μν₯μ λ―ΈμΉλ μμΈ
μ¬λ¬ μμΈμ΄ λ·° μ ν μ€ λ λλ§ μ±λ₯ μ νμ μμΈμ΄ λ μ μμ΅λλ€:
- νμΈνΈ 볡μ‘μ±(Paint Complexity): μ λλ©μ΄μ λλ μκ°μ μμμ 볡μ‘μ±μ νμΈνΈ μκ°μ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€. κ·Έλ¦Όμ, κ·ΈλΌλ°μ΄μ , λΈλ¬ λλ 볡μ‘ν λͺ¨μμ κ°μ§ μμλ λ λλ§νλ λ° λ λ§μ μ²λ¦¬ λ₯λ ₯μ΄ νμν©λλ€.
- λ μ΄μ΄ μμ±(Layer Creation):
transform,opacity,will-changeμ κ°μ νΉμ CSS μμ±μ μ λ μ΄μ΄ μμ±μ νΈλ¦¬κ±°ν μ μμ΅λλ€. λ μ΄μ΄λ ν©μ± μ±λ₯μ ν₯μμν¬ μ μμ§λ§, κ³Όλν λ μ΄μ΄ μμ±μ μ€λ²ν€λλ₯Ό μΆκ°ν μ μμ΅λλ€. - ν©μ± 볡μ‘μ±(Composite Complexity): μ¬λ¬ λ μ΄μ΄λ₯Ό μ΅μ’ μ΄λ―Έμ§λ‘ κ²°ν©νλ κ²μ κ³μ° λΉμ©μ΄ λ§μ΄ λ€ μ μμΌλ©°, νΉν λ μ΄μ΄κ° κ²ΉμΉκ±°λ λΈλ λ©μ΄ νμν κ²½μ° λμ± κ·Έλ μ΅λλ€.
- μ λλ©μ΄μ 볡μ‘μ±(Animation Complexity): μλ§μ μμ±μ΄λ ν€νλ μμ ν¬ν¨νλ 볡μ‘ν μ λλ©μ΄μ μ λΈλΌμ°μ μ λ λλ§ μμ§μ λΆλ΄μ μ€ μ μμ΅λλ€.
- μμ μ(Element Count): μ ν μ€μ μ λλ©μ΄μ λλ μμμ μλ νΉν μ μ¬μ μ₯μΉμμ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
- 리νμΈνΈμ 리νλ‘μ°(Repaints and Reflows): μμμ κΈ°ννμ ꡬ쑰(ν¬κΈ° λλ μμΉ) λ³κ²½μ 리νλ‘μ°(reflow)λ₯Ό νΈλ¦¬κ±°νμ¬ λΈλΌμ°μ κ° νμ΄μ§ λ μ΄μμμ λ€μ κ³μ°νκ² ν μ μμ΅λλ€. μμμ λͺ¨μ λ³κ²½μ 리νμΈνΈ(repaint)λ₯Ό νΈλ¦¬κ±°ν μ μμ΅λλ€. 리νμΈνΈμ 리νλ‘μ°λ λͺ¨λ λΉμ©μ΄ λ§μ΄ λλ μμ μ΄λ―λ‘ μ΅μνν΄μΌ ν©λλ€.
μ ν μμ λ λλ§μ μν μ΅μ ν κΈ°λ²
λΆλλ½κ³ ν¨μ¨μ μΈ λ·° μ νμ λ¬μ±νλ €λ©΄ λ€μ μ΅μ ν κΈ°λ²μ κ³ λ €νμμμ€:
1. νμΈνΈ 볡μ‘μ± μ€μ΄κΈ°
- μκ°μ μμ λ¨μν: κ·Έλ¦Όμ, κ·ΈλΌλ°μ΄μ , λΈλ¬κ° μ μ λ λ¨μν λμμΈμ μ ννμΈμ. μ±λ₯ μ§μ½μ μΌ μ μλ CSS νν°λ λλ¬Όκ² μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
- μ΄λ―Έμ§ μ΅μ ν: WebP λλ AVIFμ κ°μ μ΅μ νλ μ΄λ―Έμ§ νμμ μ¬μ©νκ³ , μ΄λ―Έμ§κ° νμ ν¬κΈ°μ λ§κ² μ μ ν μ‘°μ λμλμ§ νμΈνμΈμ. λΈλΌμ°μ μμ ν° μ΄λ―Έμ§λ₯Ό μΆμνλ©΄ λΆνμν μ²λ¦¬κ° λ°μν μ μμΌλ―λ‘ νΌνμμμ€.
- λ²‘ν° κ·Έλν½(SVG) μ¬μ©: SVGλ νμ₯ κ°λ₯νλ©° λ¨μν λͺ¨μκ³Ό μμ΄μ½μ λν΄ λμ€ν° μ΄λ―Έμ§λ³΄λ€ μ±λ₯μ΄ λ μ’μ κ²½μ°κ° λ§μ΅λλ€. λΆνμν λ©νλ°μ΄ν°λ₯Ό μ κ±°νκ³ κ²½λ‘λ₯Ό λ¨μννμ¬ SVGλ₯Ό μ΅μ ννμΈμ.
- 볡μ‘ν λ°°κ²½ κ²ΉμΉ¨ νΌνκΈ°: κ²ΉμΉλ κ·ΈλΌλ°μ΄μ μ΄λ 볡μ‘ν λ°°κ²½ μ΄λ―Έμ§λ νμΈνΈ μκ°μ ν¬κ² μ¦κ°μν¬ μ μμ΅λλ€. λ°°κ²½μ λ¨μννκ±°λ κ°λ₯ν κ²½μ° λ¨μμ μ¬μ©νμμμ€.
μμ: 볡μ‘ν μ¬λ¬ μμ μ€λ¨μ μ΄ μλ κ·ΈλΌλ°μ΄μ λμ , λ μ μ μ€λ¨μ μ΄ μλ λ¨μν κ·ΈλΌλ°μ΄μ μ΄λ λ¨μ λ°°κ²½μ μ¬μ©νλ κ²μ κ³ λ €νμΈμ. μ΄λ―Έμ§λ₯Ό μ¬μ©νλ κ²½μ° μΉ μ μ‘μ μ΅μ νλμλμ§ νμΈνμμμ€.
2. λ μ΄μ΄ κ΄λ¦¬ μ΅μ ν
will-changeμ μ€νκ² μ¬μ©νκΈ°:will-changeμμ±μ λΈλΌμ°μ μ μμκ° λ³κ²½λ κ²μμ μλ €μ£Όμ΄ μ¬μ μ μ΅μ νλ₯Ό μνν μ μκ² ν©λλ€. κ·Έλ¬λwill-changeλ₯Ό λ¨μ©νλ©΄ κ³Όλν λ μ΄μ΄ μμ±κ³Ό λ©λͺ¨λ¦¬ μλΉ μ¦κ°λ‘ μ΄μ΄μ§ μ μμ΅λλ€. νλ°νκ² μ λλ©μ΄μ λλ μμμλ§will-changeλ₯Ό μ μ©νμμμ€.- μμλ₯Ό λ μ΄μ΄λ‘ νλͺ
νκ² μΉκ²©μν€κΈ°:
transformλ°opacityμ κ°μ νΉμ CSS μμ±μ μμλ₯Ό μλμΌλ‘ λ μ΄μ΄λ‘ μΉκ²©μν΅λλ€. μ΄λ ν©μ± μ±λ₯μ ν₯μμν¬ μ μμ§λ§, κ³Όλν λ μ΄μ΄ μμ±μ μ€λ²ν€λλ₯Ό μΆκ°ν μ μμ΅λλ€. μ΄λ€ μμκ° λ μ΄μ΄λ‘ μΉκ²©λλμ§ μ£Όμνκ³ λΆνμν λ μ΄μ΄ μμ±μ νΌνμμμ€. - λ μ΄μ΄ ν΅ν©: κ°λ₯νλ€λ©΄ μ¬λ¬ μμλ₯Ό λ¨μΌ λ μ΄μ΄λ‘ ν΅ν©νμμμ€. μ΄λ κ² νλ©΄ λΈλΌμ°μ κ° κ΄λ¦¬ν΄μΌ νλ λ μ΄μ΄ μλ₯Ό μ€μ΄κ³ ν©μ± μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
μμ: κ·Έλ£Ή λ΄μ κ°λ³ μμλ₯Ό μ λλ©μ΄μ
νλ λμ , λΆλͺ¨ μμμ transformμ μ μ©νμ¬ μ 체 κ·Έλ£Ήμ λ¨μΌ λ μ΄μ΄λ‘ μ λλ©μ΄μ
νλ κ²μ κ³ λ €νμΈμ.
3. μ λλ©μ΄μ λ¨μν
- Transformκ³Ό Opacity μ¬μ©:
transformκ³Όopacityλ₯Ό μ λλ©μ΄μ νλ κ²μ μΌλ°μ μΌλ‘ λ€λ₯Έ CSS μμ±μ μ λλ©μ΄μ νλ κ²λ³΄λ€ μ±λ₯μ΄ λ°μ΄λ©λλ€. μ΄λ¬ν μμ±μ GPUμμ μ§μ μ²λ¦¬ν μ μκΈ° λλ¬Έμ λλ€. - λ μ΄μμμ μ λ°νλ μμ± νΌνκΈ°:
width,height,margin,paddingκ³Ό κ°μ΄ λ μ΄μμμ μν₯μ λ―ΈμΉλ μμ±μ μ λλ©μ΄μ νλ©΄ λΉμ©μ΄ λ§μ΄ λλ μμ μΈ λ¦¬νλ‘μ°λ₯Ό νΈλ¦¬κ±°ν μ μμ΅λλ€. λμtransformμ μ¬μ©νμ¬ μμμ ν¬κΈ°μ μμΉλ₯Ό μ λλ©μ΄μ νμΈμ. - JavaScript μ λλ©μ΄μ λ³΄λ€ CSS μ ν μ¬μ©: CSS μ νμ λΈλΌμ°μ κ° λ ν¨κ³Όμ μΌλ‘ μ΅μ νν μ μμΌλ―λ‘ JavaScript μ λλ©μ΄μ λ³΄λ€ μ±λ₯μ΄ λ μ’μ κ²½μ°κ° λ§μ΅λλ€.
- ν€νλ μ μ μ€μ΄κΈ°: ν€νλ μμ΄ μ μμλ‘ μΌλ°μ μΌλ‘ λ λΆλλ½κ³ ν¨μ¨μ μΈ μ λλ©μ΄μ μΌλ‘ μ΄μ΄μ§λλ€. λΆνμν ν€νλ μμ νΌνκ³ μ΅μνμ λ¨κ³λ‘ λΆλλ¬μ΄ μ νμ μν΄ λ Έλ ₯νμμμ€.
transition-durationνλͺ νκ² μ¬μ©νκΈ°: μ ν μ§μ μκ°μ΄ μ§§μμλ‘ μ λλ©μ΄μ μ΄ λ λΉ λ₯΄κ² λκ»΄μ§ μ μμ§λ§, λ§€μ° μ§§μ μ§μ μκ°μ μ±λ₯ λ¬Έμ λ₯Ό λ λμ λκ² λ§λ€ μλ μμ΅λλ€. λ°μμ±κ³Ό λΆλλ¬μ μ¬μ΄μ κ· νμ μ°ΎκΈ° μν΄ λ€μν μ§μ μκ°μ μ€νν΄ λ³΄μΈμ.- μ΄μ§ ν¨μ μ΅μ ν: μΌλΆ μ΄μ§ ν¨μλ λ€λ₯Έ ν¨μλ³΄λ€ κ³μ° λΉμ©μ΄ λ λ§μ΄ λλλ€. λ€μν μ΄μ§ ν¨μλ₯Ό μ€ννμ¬ μ΅μνμ μ±λ₯ μν₯μΌλ‘ μνλ μκ° ν¨κ³Όλ₯Ό μ 곡νλ κ²μ μ°ΎμΌμΈμ.
μμ: μμμ widthλ₯Ό μ λλ©μ΄μ
νλ λμ transform: scaleX()λ₯Ό μ¬μ©νμ¬ λ¦¬νλ‘μ°λ₯Ό νΈλ¦¬κ±°νμ§ μκ³ λμΌν μκ° ν¨κ³Όλ₯Ό μ»μΌμΈμ.
4. μμ μ μ΅μ ν
- DOM ν¬κΈ° μ€μ΄κΈ°: DOMμ΄ μμμλ‘ μΌλ°μ μΌλ‘ μ±λ₯μ΄ ν₯μλ©λλ€. νμ΄μ§μμ λΆνμν μμλ₯Ό μ κ±°νκ³ κ°λ₯ν κ²½μ° DOM ꡬ쑰λ₯Ό λ¨μννμμμ€.
- λͺ©λ‘ λ° κ·Έλ¦¬λ κ°μν: κΈ΄ λͺ©λ‘μ΄λ 그리λλ₯Ό μ λλ©μ΄μ νλ κ²½μ°, κ°μν κΈ°μ μ μ¬μ©νμ¬ λ³΄μ΄λ νλͺ©λ§ λ λλ§νλ κ²μ κ³ λ €νμμμ€. μ΄λ μ λλ©μ΄μ λλ μμμ μλ₯Ό ν¬κ² μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- CSS Containment μ¬μ©:
containμμ±μ μ¬μ©νλ©΄ DOMμ μΌλΆλ₯Ό 격리νμ¬ ν μμμ λ³κ²½μ΄ λ€λ₯Έ μμμ μν₯μ λ―ΈμΉμ§ μλλ‘ ν μ μμ΅λλ€. μ΄λ 리νλ‘μ° λ° λ¦¬νμΈνΈμ λ²μλ₯Ό μ€μ¬ λ λλ§ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
μμ: κΈ΄ νλͺ© λͺ©λ‘μ΄ μλ κ²½μ°, React Virtualized λλ vue-virtual-scrollerμ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ νμ¬ λ·°ν¬νΈμ 보μ΄λ νλͺ©λ§ λ λλ§νμΈμ.
5. μ λ©΄μμ νλ©΄ λ λλ§κ³Ό Z-Index
μμκ° νμΈνΈλλ μμλ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€. λΈλΌμ°μ λ μΌλ°μ μΌλ‘ μμλ₯Ό μ λ©΄μμ νλ©΄ μμλ‘ νμΈνΈνλ©°, μ΄λ z-index κ°μ΄ λμ μμκ° λμ€μ νμΈνΈλ¨μ μλ―Έν©λλ€. λ€λ₯Έ z-index κ°μ κ°μ§ 볡μ‘ν κ²ΉμΉλ μμλ ν½μ μ΄ μ¬λ¬ λ² νμΈνΈλλ μ€λ²λλ‘(overdraw)λ‘ μ΄μ΄μ§ μ μμ΅λλ€. λ·° μ ν APIκ° λΆλλ¬μ΄ μ νμ 보μ₯νκΈ° μν΄ z-indexλ₯Ό κ΄λ¦¬νμ§λ§, z-index λμμ μ΄ν΄νλ κ²μ μ¬μ ν μ€μν©λλ€.
- κ²ΉμΉλ μμ μ΅μν: λμμΈμμ κ²ΉμΉλ μμμ μλ₯Ό μ€μ΄μμμ€. κ²ΉμΉ¨μ΄ νμν κ²½μ° ν΄λΉ μμλ€μ΄ ν©μ±μ μν΄ μ΅μ νλμλμ§ νμΈνμμμ€.
- Z-Index μ λ΅μ μΌλ‘ μ¬μ©: λΆνμν μ€λ²λλ‘λ₯Ό νΌνκΈ° μν΄ z-index κ°μ μ μ€νκ² ν λΉνμμμ€. κ³ μ ν z-index κ°μ μλ₯Ό μ΅μνμΌλ‘ μ μ§νλλ‘ λ Έλ ₯νμμμ€.
- ν¬λͺ ν μ€λ²λ μ΄ νΌνκΈ°: ν¬λͺ ν μ€λ²λ μ΄λ μλμ ν½μ μ λΈλ λ©ν΄μΌ νλ―λ‘ λ λλ§ λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€. λΆν¬λͺ ν μμμ΄λ μν μ±λμ΄ μλ μ΅μ νλ μ΄λ―Έμ§ νμμ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
μμ: λ©μΈ μ½ν μΈ μμ μ€λ²λ μ΄λλ λͺ¨λ¬ μ°½μ΄ μλ κ²½μ°, z-indexλ₯Ό μ¬μ©νμ¬ λͺ¨λ¬μ΄ μ½ν μΈ μμ μμΉνλλ‘ νκ³ λΆνμν λΈλ λ©μ νΌνκΈ° μν΄ λͺ¨λ¬μ λ°°κ²½μ΄ λΆν¬λͺ νμ§ νμΈνμμμ€.
6. λꡬ λ° νλ‘νμΌλ§
λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό νμ©νλ κ²μ λ·° μ νμ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ ν΄κ²°νλ λ° μ€μν©λλ€.
- Chrome DevTools μ±λ₯ ν¨λ: μ±λ₯ ν¨λμ μ¬μ©νμ¬ λ·° μ νμ λ λλ§ μ±λ₯μ κΈ°λ‘νκ³ λΆμνμμμ€. κΈ΄ νμΈνΈ μκ°, κ³Όλν λ μ΄μ΄ μμ± λ° κΈ°ν μ±λ₯ λ¬Έμ λ₯Ό μλ³νμμμ€.
- Firefox Profiler: Chrome DevToolsμ μ μ¬νκ², Firefox Profilerλ λ·° μ νμ ν¬ν¨νμ¬ μΉ μ ν리μΌμ΄μ μ μ±λ₯μ λν μμΈν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
- WebPageTest: WebPageTestλ λ€μν μ₯μΉ λ° λ€νΈμν¬ μ‘°κ±΄μμ μΉ νμ΄μ§μ μ±λ₯μ ν μ€νΈνκΈ° μν κ°λ ₯ν μ¨λΌμΈ λꡬμ λλ€. λ‘컬 κ°λ° νκ²½μμλ λͺ ννμ§ μμ μ μλ μ±λ₯ λ¬Έμ λ₯Ό μλ³νκΈ° μν΄ WebPageTestλ₯Ό μ¬μ©νμμμ€.
μμ: Chrome DevTools μ±λ₯ ν¨λμ μ¬μ©νμ¬ λ·° μ νμ κΈ°λ‘νκ³ νμλΌμΈμ λΆμνμμμ€. κΈ΄ νμΈνΈ μκ°, κ³Όλν λ μ΄μ΄ μμ± λ° κΈ°ν μ±λ₯ λ³λͺ© νμμ μ°ΎμΌμμμ€. μ±λ₯ λ¬Έμ μ κΈ°μ¬νλ νΉμ μμλ μ λλ©μ΄μ μ μλ³νκ³ μμμ μ€λͺ ν μ΅μ ν κΈ°λ²μ μ μ©νμμμ€.
μ€μ μμ λ° μ¬λ‘ μ°κ΅¬
μ΄λ¬ν μ΅μ ν κΈ°λ²μ΄ λ·° μ νμ μ±λ₯μ ν₯μμν€κΈ° μν΄ μ΄λ»κ² μ μ©λ μ μλμ§ λͺ κ°μ§ μ€μ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
μμ 1: μ μμκ±°λ μ ν νμ΄μ§ μ ν
μ ν λͺ©λ‘ νμ΄μ§μ κ°λ³ μ ν νμ΄μ§ κ°μ μ νμ μ λλ©μ΄μ νκΈ° μν΄ λ·° μ νμ μ¬μ©νλ μ μμκ±°λ μΉμ¬μ΄νΈλ₯Ό μκ°ν΄λ³΄μμμ€. μλ ꡬνμ 볡μ‘ν μ ν μ΄λ―Έμ§μ κ³Όλν DOM ν¬κΈ°λ‘ μΈν΄ λ²λ² 거리λ μ λλ©μ΄μ μΌλ‘ μ΄λ €μμ κ²ͺμμ΅λλ€.
μ μ©λ μ΅μ ν:
- WebP νμμ μ¬μ©νμ¬ μ ν μ΄λ―Έμ§ μ΅μ ν.
- μ΄κΈ° DOM ν¬κΈ°λ₯Ό μ€μ΄κΈ° μν΄ μ ν μ΄λ―Έμ§μ μ§μ° λ‘λ©(lazy loading) μ¬μ©.
- DOM μμ μλ₯Ό μ€μ΄κΈ° μν΄ μ ν νμ΄μ§ λ μ΄μμ λ¨μν.
widthμheightλμtransformμ μ¬μ©νμ¬ μ ν μ΄λ―Έμ§ μ λλ©μ΄μ .
κ²°κ³Ό:
- μ ν λΆλλ¬μ 60% ν₯μ.
- νμ΄μ§ λ‘λ μκ° 30% λ¨μΆ.
μμ 2: λ΄μ€ μΉμ¬μ΄νΈ κΈ°μ¬ μ ν
ν λ΄μ€ μΉμ¬μ΄νΈλ κΈ°μ¬ λͺ©λ‘ νμ΄μ§μ κ°λ³ κΈ°μ¬ νμ΄μ§ κ°μ μ νμ μ λλ©μ΄μ νκΈ° μν΄ λ·° μ νμ μ¬μ©νμ΅λλ€. μλ ꡬνμ 볡μ‘ν CSS νν°μ μ λλ©μ΄μ μΌλ‘ μΈν΄ μ±λ₯ λ¬Έμ λ₯Ό κ²ͺμμ΅λλ€.
μ μ©λ μ΅μ ν:
- 볡μ‘ν CSS νν°λ₯Ό λ κ°λ¨ν λμμΌλ‘ κ΅μ²΄.
- μ λλ©μ΄μ μ ν€νλ μ μ κ°μ.
- κ³Όλν λ μ΄μ΄ μμ±μ νΌνκΈ° μν΄
will-changeλ₯Ό λλ¬Όκ² μ¬μ©.
κ²°κ³Ό:
- μ ν λΆλλ¬μ 45% ν₯μ.
- μ ν μ€ CPU μ¬μ©λ 25% κ°μ.
κ²°λ‘
CSS λ·° μ νμ μΉ μ ν리μΌμ΄μ μ μ¬μ©μ κ²½νμ ν₯μμν€λ λ§€λ ₯μ μΈ λ°©λ²μ μ 곡ν©λλ€. μ ν μμκ° λ λλ§λλ λ°©μμ μ΄ν΄νκ³ μ΄ κΈμμ μ€λͺ ν μ΅μ ν κΈ°λ²μ μ μ©ν¨μΌλ‘μ¨, λ·° μ νμ΄ μκ°μ μΌλ‘ λ§€λ ₯μ μ΄λ©΄μλ μ±λ₯μ΄ λ°μ΄λλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μ±λ₯ λ³λͺ© νμμ μλ³νκ³ ν΄κ²°νκΈ° μν΄ λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ νμ νλ‘νμΌλ§νλ κ²μ μμ§ λ§μμμ€. μ±λ₯μ μ°μ μν¨μΌλ‘μ¨, λ€μν μ₯μΉ λ° λ€νΈμν¬ μ‘°κ±΄μμ μνν μ¬μ©μ κ²½νμ μ 곡νλ λ§€λ ₯μ μ΄κ³ λ°μμ±μ΄ λ°μ΄λ μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. ν΅μ¬ λ΄μ©μ μκ°μ μμ λ¨μν, λ μ΄μ΄ κ΄λ¦¬ μ΅μ ν, μ λλ©μ΄μ λ¨μν, μμ μ μ€μ΄κΈ°, κ·Έλ¦¬κ³ z-indexμ μ λ΅μ μ¬μ©μ λλ€. λ·° μ νμ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ μ΅μ νν¨μΌλ‘μ¨, μΉ μ ν리μΌμ΄μ μ΄ μ μΈκ³μ μΌλ‘ μΌκ΄λκ² λΆλλ½κ³ μ¦κ±°μ΄ μ¬μ©μ κ²½νμ μ 곡νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.