μ±λ₯ μ΅μ νλ₯Ό ν λ²λ μ λλ‘ μμλ³Έ μ μ΄ μλ κ² κ°μ, λ©΄μ μ μ€λΉνλ©΄μ μ΄λ ν λ°©λ²λ€κ³Ό κ°λ
λ€μ΄ μλμ§ μμ보μλ€.
β
μ μ‘ μ΅μ ν - λ€νΈμν¬ κ΅¬κ°
λΈλΌμ°μ κ° νμ΄μ§λ₯Ό νμνκΈ° μν΄ μλ²μμ HTML , CSS , JS , μ΄λ―Έμ§ λ± μ¬λ¬ νμΌμ λ°μμ€λλ°, μ΄ λ€μ΄λ‘λ κ³Όμ μ μ€μ΄κ±°λ λΉ λ₯΄κ² λ§λλ λ°©λ²μ΄λ€.
π μ½λ λΆν : Code Splitting
- μ²μ νμ΄μ§λ₯Ό μ΄ λ, JS νμΌμ΄ λ무 ν¬λ©΄ λ€μ΄λ‘λ, ν΄μ, μ€νμ΄ μ€λ κ±Έλ¦°λ€.
- κ·Έλμ μ½λλ₯Ό μκ² μͺΌκ° νμν μκ°μλ§ λΆλ¬μ€λ©΄ μ΄κΈ° λ‘λ©μ΄ λΉ¨λΌμ§λ€.
React.lazy , import() λ₯Ό μ¬μ©νμ¬ ν΄λΉ κΈ°λ₯μ΄ νμν λλ§ κ°μ Έμ€κ² ν μ μλ€.
- λ€λ§ μ§λμΉκ² μͺΌκ°λ©΄ λ€νΈμν¬ μμ²μ΄ λ§μμ Έμ μ€νλ € λλ €μ§ μ μλ€.
π νΈλ¦¬ μ
°μ΄νΉ : Tree Shaking
- λ²λ€μ μ¬μ©νμ§ μλ μ½λκΉμ§ ν¬ν¨λλ©΄ νμΌμ΄ λΆνμνκ² μ»€μ§λ€.
- μ¬μ©λλ μ½λλ§ λ¨κΈ°κ³ λλ¨Έμ§λ₯Ό μ κ±° νλ©΄ μ μ‘ μ©λμ΄ μ€μ΄λ λ€
ES Module λ°©μ (import/export) μ μ¬μ©νκ³ , λΌμ΄λΈλ¬λ¦¬λ νμν ν¨μλ§ κ°μ Έμ€λ©΄ λλ€.
π μμΆ : gzip/brotli
JS , CSS , HTML μ ν
μ€νΈμ΄λ―λ‘ μμΆνλ©΄ μ©λμ 20~70% μ€μΌ μ μλ€.
- μλ²λ CDNμμ
Content-Encoding: br μ΄λ gzip μ μ€μ νλ€.
- μ΄λ―Έ μμΆλ μ΄λ―Έμ§/ν°νΈλ λ€μ μμΆν΄λ ν¨κ³Όκ° μλ€.
π μ΄λ―Έμ§ μ΅μ ν : WebP/AVIF, lazy-loading
- μ΄λ―Έμ§κ° νμ΄μ§ λ‘λ© μλλ₯Ό κ°μ₯ λ§μ΄ μ‘μλ¨Ήλ κ²½μ°κ° λ§λ€.
JPG/PNG λμ μ©λμ΄ μ μ WebP/AVIF ν¬λ§·μ μ¬μ©νλ€.
- λλ
loading="lazy" λ‘ νλ©΄μ 보μ΄κΈ° μ§μ κΉμ§ λ€μ΄λ‘λλ₯Ό μ§μ°μν¨λ€.
π CDN & μΊμ : Cache-Control, ETag
- κ°μ νμΌμ μ¬λ°©λ¬Έ λ λ€μ λ€μ΄λ‘λνμ§ μκ² νλ©΄ λΉ λ₯΄λ€.
- νμΌλͺ
μ λ²μ ν΄μλ₯Ό λΆμ΄κ³ ,
CDN μμ μ₯κΈ° μΊμλ₯Ό μ€μ νλ€.
β
λ λλ§ μ΅μ ν
μλ²μμ νμΌμ λ°μμ¨ ν, λΈλΌμ°μ κ° λΉ λ₯΄κ² λ λλ§ν μ μλλ‘ νλ λ°©λ²
- μλ²μμ
HTML μ λ§λ€μ΄ 보λ΄λ©΄, λΈλΌμ°μ κ° λ°λ‘ νμ κ°λ₯νλ€.
- κ²μ λ
ΈμΆμ΄ μ€μνκ±°λ 첫 ν€λ
νμ μλκ° μ€μν κ²½μ° μ΄λ₯Ό μ¬μ©νλ©΄ μ’λ€.
- νμ΄λλ μ΄μ
(μλ² λ λ HTMLμ JS μ΄λ²€νΈ μ°κ²°) λΉμ©μ΄ λ무 ν¬λ©΄ μνΈμμ©μ΄ λλ €μ§ μ μλ€.
π CSR μ§μ° λ‘λ©
- ν λ²μ λ§μ
JS λ₯Ό μ€ννλ©΄ 첫 νλ©΄ νμκ° λ¦μ΄μ§λ€.
- νλ©΄ μλμͺΎμ μ»΄ν¬λνΈλ
InterSection Observerλ‘ μ€μ λ³΄μΌ λ λ‘λ©νκ² νλ€.
π Critical CSS / ν°νΈ μ΅μ ν
- νλ©΄ νμλ₯Ό λ§λ CSS/ν°νΈ λ‘λ©μ μ€μ΄λ©΄ LCPκ° κ°μ λλ€.
- νμν CSSλ§ HTMLμ μΈλΌμΈ, λλ¨Έμ§λ μ§μ°λ‘λ©
- ν°νΈλ
rel=preconnect +font-display:swap μ μ¬μ©νλ€.
- CSSμ
@import λ λ‘λ© μ°¨λ¨μ΄ 컀μ νΌν΄μΌ νλ€.
π λ μ΄μμ μ€λμ± λ°©μ§
- DOMμ λ μ΄μμμ μ½κ³ μ°λ λμμ΄ μμ΄λ©΄ λΈλΌμ°μ κ° κ³μ λ€μ κ³μ°ν΄μΌ ν΄μ νλ μ λλμ΄ λλ€.
- μ½κΈ° μμ
ν μ°κΈ° μμ
μΌλ‘ λ¬Άκ³ , μμΉ λ³κ²½μ
transform μ μ¬μ©νλ€.
β
λ°νμ μ΅μ ν - μ€ν μ€
μ΄λ―Έ λ‘λλ νμ΄μ§κ° μ¬μ©μμ μ
λ ₯/μ€ν¬λ‘€ λ±μ λΉ λ₯΄κ² λ°μνλλ‘ μ€ν μ€ λμμ μ΅μ ννλ λ°©λ²μ΄λ€.
π λ©λͺ¨μ΄μ μ΄μ
- κ°μ κ³μ°μ λ°λ³΅νμ§ μκ² μΊμ±ν΄ CPU λλΉλ₯Ό μ€μΈλ€.
- Reactμ
useMemo , useCallback , React.memo λ±μ μ¬μ©νλ©΄ λλ€.
- λ€λ§, κ³μ°μ΄ λΉ λ₯Έ μμ
μ λ¨μ©νλ©΄ λ©λͺ¨λ¦¬ λλΉκ° λ μλ μλ€.
π κ°μ μ€ν¬λ‘€
- μμ² κ°μ 리μ€νΈλ₯Ό ν λ²μ 그리면 λλ €μ§λ€.
- νλ©΄μ 보μ΄λ λ²μλ§ DOMμ λ λλ§, λλ¨Έμ§λ κ°μμΌλ‘ κ΄λ¦¬νλ€.
π μ΄λ²€νΈ μμ
- μλ§μ μμ μμλ§λ€ μ΄λ²€νΈλ₯Ό λ¬λ©΄ λ©λͺ¨λ¦¬μ μ±λ₯μ΄ λλΉλλ€.
- λΆλͺ¨ μμμ μ΄λ²€νΈλ₯Ό ν λ²λ§ λ¬κ³
event.target μΌλ‘ λΆκΈ° μ²λ¦¬λ₯Ό ν΄μ€λ€.
π Debounce/Throttle
- μ
λ ₯/μ€ν¬λ‘€ κ°μ μ΄λ²€νΈκ° λ무 μμ£Ό λ°μνλ©΄ λ λλ§μ΄ λλ €μ§λ€.
- Debounce : λ§μ§λ§ μ΄λ²€νΈ ν μΌμ μκ°λ§ μ€ν
- Throttle : μΌμ μ£ΌκΈ°λ§λ€ μ€ν
π ν΅μ¬ μ§ν
- LCP : κ°μ₯ ν° μ»¨ν
μΈ νμκΉμ§ κ±Έλ¦° μκ° (λͺ©ν β€ 2.5s)
- CLS : νλ©΄ μμμ μκΈ°μΉ μμ μμ§μ μ λ (λͺ©ν β€ 0.1)
- INP : μ¬μ©μ μ
λ ₯ ν λ°μ μκ° (λͺ©ν β€ 200ms)