곡삼
article thumbnail


πŸ’¬ λ¦¬ν”Œλ‘œμš°μ™€ 리페인트

λ¦¬ν”Œλ‘œμš°(Reflow)와 리페인트(Repaint)λŠ” μ›Ή λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ κ³Όμ •μ—μ„œ μ€‘μš”ν•œ κ°œλ…μ΄λ‹€.

 

이 두 μš©μ–΄λŠ” μ›Ή νŽ˜μ΄μ§€μ˜ λ ˆμ΄μ•„μ›ƒ 및 μ‹œκ°μ  ν‘œν˜„μ„ κ΄€λ¦¬ν•˜κ³  μ΅œμ ν™”ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

 

 

λ¦¬ν”Œλ‘œμš° (Reflow)

  • λ¦¬ν”Œλ‘œμš°λŠ” μ›Ή νŽ˜μ΄μ§€μ˜ λ ˆμ΄μ•„μ›ƒμ΄ 변경될 λ•Œ λ°œμƒν•˜λŠ” 과정을 λ‚˜νƒ€λ‚Έλ‹€. 이것은 μš”μ†Œμ˜ 크기, μœ„μΉ˜, ꡬ쑰 λ˜λŠ” μŠ€νƒ€μΌμ΄ 변경될 λ•Œ λ°œμƒν•œλ‹€.
  • λΈŒλΌμš°μ €λŠ” λ ˆμ΄μ•„μ›ƒ λ³€κ²½ 사항을 κ³„μ‚°ν•˜κ³ , 이 λ³€κ²½ 사항에 영ν–₯을 λ°›λŠ” μš”μ†Œ 및 κ·Έ ν•˜μœ„ μš”μ†Œλ“€μ„ λ‹€μ‹œ λ°°μΉ˜ν•œλ‹€. 이둜 인해 λ ˆμ΄μ•„μ›ƒ 트리(Layout Tree)와 λ Œλ” 트리(Render Tree)κ°€ λ‹€μ‹œ μƒμ„±λœλ‹€.
  • λ¦¬ν”Œλ‘œμš°λŠ” λΉ„μš©μ΄ 많이 λ“œλŠ” μ—°μ‚°μ΄λ―€λ‘œ 자주 λ°œμƒν•˜λ©΄ μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ  수 μžˆμœΌλ―€λ‘œ μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€.

 

 

리페인트 (Repaint)

  • λ¦¬νŽ˜μΈνŠΈλŠ” 화면에 이미 그렀진 μš”μ†Œμ˜ 일뢀뢄 λ˜λŠ” 전체λ₯Ό λ‹€μ‹œ κ·Έλ¦¬λŠ” 과정을 λ‚˜νƒ€λ‚Έλ‹€. 이것은 μŠ€νƒ€μΌ, 배경색, ν…μŠ€νŠΈ λ‚΄μš© λ˜λŠ” λ‹€λ₯Έ κ·Έλž˜ν”½ μš”μ†Œμ˜ λ³€κ²½ μ‹œμ— λ°œμƒν•œλ‹€.
  • λ¦¬νŽ˜μΈνŠΈλŠ” λ¦¬ν”Œλ‘œμš°λ³΄λ‹€ λΉ„μš©μ΄ 적게 λ“€λ©°, λ ˆμ΄μ•„μ›ƒ 변경이 μ—†κ³  μ‹œκ°μ μΈ λ³€κ²½λ§Œ μžˆλŠ” κ²½μš°μ— λ°œμƒν•œλ‹€.
  • 예λ₯Ό λ“€μ–΄, μš”μ†Œμ˜ 색상을 λ³€κ²½ν•˜κ±°λ‚˜ κ°€μ‹œμ„±μ„ ν† κΈ€ν•˜λŠ” 경우 λ¦¬νŽ˜μΈνŠΈκ°€ λ°œμƒν•  수 μžˆλ‹€.

 

 

μ΄λŸ¬ν•œ λ¦¬ν”Œλ‘œμš°μ™€ λ¦¬νŽ˜μΈνŠΈλŠ” μ΅œμ†Œν™” ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό μ›Ή νŽ˜μ΄μ§€μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ”λ° μ€‘μš”ν•˜λ‹€. λ”°λΌμ„œ λ‹€μŒκ³Ό 같은 고렀방법을 톡해 μ΄μš©ν•˜λŠ” 것이 ꢌμž₯λœλ‹€.

 

μ‚¬μš©μ‹œ 참고사항

  • CSS μ΅œμ ν™”: λ³΅μž‘ν•œ CSS μ„ νƒμžλ‚˜ μŠ€νƒ€μΌ 변경을 ν”Όν•˜κ³ , μŠ€νƒ€μΌ 변경을 ν•œ λ²ˆμ— λͺ¨μ•„μ„œ μ μš©ν•œλ‹€.
  • CSS νŠΈλžœμ§€μ…˜ 및 μ• λ‹ˆλ©”μ΄μ…˜ μ‚¬μš© μ΅œμ ν™”: GPU 가속을 ν™œμš©ν•˜μ—¬ λΆ€λ“œλŸ¬μš΄ μ• λ‹ˆλ©”μ΄μ…˜μ„ λ§Œλ“€μ–΄ λ¦¬ν”Œλ‘œμš°μ™€ 리페인트λ₯Ό μ΅œμ†Œν™”ν•œλ‹€.
  • λ ˆμ΄μ•„μ›ƒ λ³€κ²½ μ΅œμ†Œν™”: JavaScriptμ—μ„œ μš”μ†Œμ˜ ν¬κΈ°λ‚˜ μœ„μΉ˜ 변경을 ν”Όν•˜κ³ , ν•„μš”ν•œ 경우 배치 μž‘μ—…μ„ μ΅œμ ν™”ν•œλ‹€.
  • ν”„λ‘œνŒŒμΌλ§ 도ꡬ μ‚¬μš©: μ›Ή 개발자 도ꡬ와 같은 ν”„λ‘œνŒŒμΌλ§ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„±λŠ₯ 병λͺ© ν˜„μƒμ„ μ‹λ³„ν•˜κ³  ν•΄κ²°ν•œλ‹€.

 


 

λ¦¬ν”Œλ‘œμš°μ™€ 리페인트의 λ°œμƒμ‘°κ±΄ 

λ¦¬ν”Œλ‘œμš°μ™€ λ¦¬νŽ˜μΈνŠΈλŠ” μ›Ή νŽ˜μ΄μ§€μ˜ λ Œλ”λ§ 엔진이 μš”μ†Œλ₯Ό λ‹€μ‹œ κ·Έλ¦¬κ±°λ‚˜, λ ˆμ΄μ•„μ›ƒμ„ λ³€κ²½ν• λ•Œ λ°œμƒν•œλ‹€.

 

λ¦¬ν”Œλ‘œμš°(Reflow) λ°œμƒμ‘°κ±΄

  1. μš”μ†Œμ˜ 크기 λ˜λŠ” μœ„μΉ˜ λ³€κ²½: μ›Ή νŽ˜μ΄μ§€μ˜ μš”μ†Œ(예: div, 이미지)의 크기 λ˜λŠ” μœ„μΉ˜κ°€ λ³€κ²½λ˜λ©΄ λ¦¬ν”Œλ‘œμš°κ°€ λ°œμƒν•œλ‹€.
  2. μœˆλ„μš° 크기 λ³€κ²½: μ›Ή λΈŒλΌμš°μ €μ˜ μ°½ 크기λ₯Ό μ‘°μ •ν•  λ•Œ λͺ¨λ“  μš”μ†Œκ°€ λ‹€μ‹œ λ°°μΉ˜λ˜λ―€λ‘œ λ¦¬ν”Œλ‘œμš°κ°€ λ°œμƒν•œλ‹€.
  3. 폰트 크기 λ³€κ²½: μ›Ή νŽ˜μ΄μ§€μ˜ ν…μŠ€νŠΈ μš”μ†Œμ— λŒ€ν•œ 폰트 크기 변경은 λ¦¬ν”Œλ‘œμš°λ₯Ό μœ λ°œν•  수 μžˆλ‹€.
  4. DOM ꡬ쑰 λ³€κ²½: DOM νŠΈλ¦¬μ— μš”μ†Œλ₯Ό μΆ”κ°€, 제거 λ˜λŠ” λ³€κ²½ν•˜λ©΄ λ¦¬ν”Œλ‘œμš°κ°€ ν•„μš”ν•˜λ‹€.
  5. μŠ€νƒ€μΌ λ³€κ²½: μš”μ†Œμ˜ μŠ€νƒ€μΌ(예: 색상, λ°°κ²½, 경계선)이 λ³€κ²½λ˜λ©΄ λ¦¬ν”Œλ‘œμš°κ°€ λ°œμƒν•  수 μžˆλ‹€.

 

리페인트 (Repaint) λ°œμƒμ‘°κ±΄

  1. μš”μ†Œμ˜ μ‹œκ°μ  속성 λ³€κ²½: μš”μ†Œμ˜ 색상, λ°°κ²½, 경계선 λ“±μ˜ μ‹œκ°μ  μŠ€νƒ€μΌ 속성이 λ³€κ²½λ˜λ©΄ λ¦¬νŽ˜μΈνŠΈκ°€ λ°œμƒν•œλ‹€.
  2. 투λͺ…도 λ³€κ²½: μš”μ†Œμ˜ 투λͺ…도가 λ³€κ²½λ˜λ©΄ λ¦¬νŽ˜μΈνŠΈκ°€ ν•„μš”ν•  수 μžˆλ‹€.
  3. ν…μŠ€νŠΈ λ‚΄μš© λ³€κ²½: ν…μŠ€νŠΈ μš”μ†Œμ˜ λ‚΄μš©μ΄ λ³€κ²½λ˜λ©΄ ν•΄λ‹Ή ν…μŠ€νŠΈμ˜ λ¦¬νŽ˜μΈνŠΈκ°€ λ°œμƒν•œλ‹€.
  4. μœˆλ„μš°μ˜ 가리기 λ˜λŠ” λ‚˜νƒ€λ‚΄κΈ°: μœˆλ„μš° λ‚΄μ—μ„œ λ‹€λ₯Έ 창이 κ°€λ €μ§€κ±°λ‚˜ λ‚˜νƒ€λ‚˜λŠ” 경우, 그리고 μœˆλ„μš°μ˜ μ΅œμ†Œν™” λ˜λŠ” 볡원과 같은 μ°½ μƒνƒœ 변경이 리페인트λ₯Ό μœ λ°œν•  수 μžˆλ‹€.

 

λ¦¬ν”Œλ‘œμš°λŠ” λ¦¬νŽ˜μΈνŠΈλ³΄λ‹€ 더 큰 μ—°μ‚°μ΄λ―€λ‘œ μ΅œμ†Œν™”ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. (layout 이 λ³€κ²½λ˜κΈ° λ•Œλ¬Έ) 

 

λ”°λΌμ„œ μ›Ή κ°œλ°œμžλŠ” CSS와 DOM μ‘°μž‘μ„ μ΅œμ ν™”ν•˜κ³ , λ ˆμ΄μ•„μ›ƒ 변경을 μ€„μ΄λŠ” 방법을 κ³ λ €ν•˜μ—¬ μ›Ή νŽ˜μ΄μ§€μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λ €κ³  λ…Έλ ₯ν•œλ‹€. 

profile

곡삼

@g_three

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!