Performance

HTML λžœλ”λ§ μˆœμ„œ

HTML 속도 κ°œμ„ μ„ μœ„ν•΄μ„œλŠ” 기본적인 λ¨Όμ € λžœλ”λ§ μˆœμ„œλ₯Ό νŒŒμ•…ν•˜κ³  이λ₯Ό κ°œμ„ ν•΄μ•Ό ν•œλ‹€.

HTML λžœλ”λ§ μˆœμ„œ

  1. μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ— URL을 μž…λ ₯ν•˜κ±°λ‚˜ 이동을 ν•œλ‹€.
  2. λΈŒλΌμš°μ € μΈν„°νŽ˜μ΄μŠ€ μ—”μ§„μ—μ„œ ν•΄λ‹Ή μž‘μ—…μ„ 뢄석 ν•œλ‹€.
  3. νŽ˜μ΄μ§€ 이동이 ν™•μΈλ˜λ©΄ ν•΄λ‹Ή μ„œλ²„μ— 정보λ₯Ό μš”μ²­ ν•œλ‹€.
    1. λ„λ©”μΈμ˜ 경우 DNS Lookup 을 ν†΅ν•˜μ—¬ μ„œλ²„ IP 경둜λ₯Ό μ–»μ–΄μ˜¨λ‹€.
    2. μ–»μ–΄μ˜¨ μ„œλ²„ 경둜둜 ν•„μš”ν•œ 경둜 정보λ₯Ό μš”μ²­ ν•œλ‹€. (3 Way Handshake)
    3. HTTP μš”μ²­ 응닡이 MIME νƒ€μž…μ„ ν™•μΈν•˜μ—¬ ν•΄λ‹Ή μžμ›μ„ λ‹€μš΄λ‘œλ“œ ν•œλ‹€.
  4. λ‹€μš΄λ‘œλ“œ 된 HTML 및 CSS λ¬Έμ„œλ₯Ό ν•΄μ„ν•˜λŠ” 과정을 κ±°μΉœλ‹€
    1. HTML 을 ν•΄μ„ν•˜μ—¬ DOM Tree ꡬ성을 ν•œλ‹€.
    2. CSS λ₯Ό ν•΄μ„ν•˜μ—¬ CSSOM (Cascading Style Sheets Object Model) 을 κ΅¬μ„±ν•œλ‹€.
    3. μœ„ 두 ꡬ성이 λͺ¨λ‘ μ™„λ£Œ ν•˜μ—¬μ•Όλ§Œ λ‹€μŒ 진행이 κ°€λŠ₯ν•˜λ‹€. (CSS : λžœλ”λ§ 블둝킹 μš”μ†Œ)
    4. 이후 μžλ°”μŠ€ν¬λ¦½νŠΈ νƒœκ·Έ ν˜Ήμ€ ꡬ문을 λ§Œλ‚˜λ©΄ μ•½μ†λœ ν”„λ‘œμ„ΈμŠ€ (비차단 슀크립트) λŒ€λ‘œ 진행 ν•œλ‹€.
  5. DOM Tree & CSSOM 이 μ™„λ£Œ 되면 Render Tree ꡬ성을 μ§„ν–‰ν•œλ‹€.
    1. CSS κ·œμΉ™μ€‘ {display:none} 을 λ§Œλ‚˜λ©΄ Render Tree κ΅¬μ„±μ—μ„œλŠ” 빠진닀. (DOM Tree μ—λŠ” 쑴재)
  6. Render Tree ꡬ성이 μ™„λ£Œλ˜λ©΄ Reflow μž‘μ—…μ„ ν†΅ν•˜μ—¬ ν•„μš”ν•œ λ ˆμ΄μ•„μ›ƒμ„ 화면에 λ°°μΉ˜ν•œλ‹€.
  7. Reflow μž‘μ—…μ΄ μ™„λ£Œ 되면 Repaint 과정을 ν†΅ν•˜μ—¬ 화면에 λ°°μΉ˜ν•œ λ ˆμ΄μ•„μ›ƒμ„ κ·Έλ¦°λ‹€.

HTML λžœλ”λ§ 속도 κ°œμ„  λ°©μ•ˆ

HTML λžœλ”λ§ 속도λ₯Ό μ˜¬λ¦¬λŠ” λ°©λ²•μ—λŠ” λ‹€μŒκ³Ό 같은 방법이 μžˆλ‹€.

HTTP Request μ΅œμ†Œν™”

μ„œλ²„μ— μžμ›μ˜ μš”μ²­μ„ μ΅œμ†Œν™” ν•˜λŠ” λ°©λ²•μœΌλ‘œ λ„€νŠΈμ›Œν¬ λ ˆμ΄ν„΄μ‹œλ₯Ό 쀄여 μ„±λŠ₯을 κ°œμ„ ν•œλ‹€.

Resource μ••μΆ•

정적 λ¦¬μ†ŒμŠ€ (HTML, JS, CSS) 의 μ†ŒμŠ€λ₯Ό μ••μΆ• (manifest) ν•˜μ—¬ μ œκ³΅ν•˜λŠ”λ°
JS, CSS λŠ” λͺ¨λ“ˆ λ²ˆλ“€λŸ¬ (webpack, manifest ... ) λ₯Ό ν†΅ν•˜μ—¬ μ œκ³΅ν•˜κ³ 
HTML 은 gzip 전솑을 ν•œλ‹€.

Reflow, Repaint μ΅œμ†Œν™”

μΆ”κ°€μ μœΌλ‘œ λΈŒλΌμš°μ €μ—μ„œ Reflow λ₯Ό μΌμœΌν‚¬λ§Œν•œ μš”μ†Œλ“€μ„ μ΅œμ†Œν™” ν•˜κΈ° μœ„ν•˜μ—¬ λ‹€μŒ κ°€μ΄λ“œλΌμΈμ„ μ°Έκ³ ν•œλ‹€.

μ‚¬μš©μžμ˜ λΈŒλΌμš°μ € λ³„λ‘œ λ¦¬ν”Œλ£¨μš° (Reflow) κ°€ κ±Έλ¦¬λŠ” μ‹œκ°„λ„ 상이 ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ λ¦¬ν”Œλ‘œμš°λ₯Ό μΌμœΌν‚€λŠ” 쑰건은 λ™μΌν•˜μ—¬ μ•„λž˜μ˜ κ°€μ΄λ“œλΌμΈμ„ ν†΅ν•˜μ—¬ μΆ©λΆ„νžˆ κ°œμ„ μ΄ κ°€λŠ₯ν•˜λ‹€.

  • λΆˆν•„μš”ν•œ DOM Depthλ₯Ό 쀄인닀.
    • DOM Tree 의 Depth ν•˜λ‚˜λ₯Ό λ³€κ²½ν•˜λ©΄ 트리의 λͺ¨λ“  Depth 에 따라 더 λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.
    • λΆ€λͺ¨λ‘œλŠ” Root, μžμ‹μ€ Update 된 Node κΉŒμ§€ λ³€κ²½ 될 κ°€λŠ₯성이 있음
  • CSS κ·œμΉ™μ„ μ΅œμ†Œν™” ν•˜κ³  μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” CSS κ·œμΉ™μ„ μ‚­μ œν•œλ‹€.
  • μ• λ‹ˆλ©”μ΄μ…˜κ³Ό 같이 λ³΅μž‘ν•œ λžœλ”λ§ μš”μ†ŒλŠ” νλ¦„μ˜ λ°–μ—μ„œ λ³€κ²½ν•œλ‹€.
    • λ³€κ²½μ‹œμ—λŠ” μ ˆλŒ€ μœ„μΉ˜ ν˜Ήμ€ κ³ μ • μœ„μΉ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
  • λΆˆν•„μš”ν•˜κ±°λ‚˜ λ³΅μž‘ν•œ CSS 선택기 ν•˜μœ„μš”μ†Œ 선택기λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • 선택기와 μΌμΉ˜μ‹œν‚€κΈ° μœ„ν•΄μ„œ 더 높은 GPU μ²˜λ¦¬λŸ‰μ˜ ν•„μš”κ°€ μš”κ΅¬λœλ‹€.

κ·Έ μ™Έ 방법듀

  • 이미지 μ΅œμ ν™”
    • 큰 이미지λ₯Ό CSS 둜 μž˜λΌμ„œ μ‚¬μš©
    • BASE 64 Encoding 전솑
  • λΈŒλΌμš°μ € 캐싱 μ‚¬μš©
  • λ°©λ¬Έ λ¦¬λ‹€μ΄λ ‰μ…˜ μ‚¬μš© μ•ˆν•¨