λΈλΌμ°μ κ° μλλ λμλ λ λλ§ κ³Όμ μμ Repaint
, Reflow
μ κ³Όμ μ κ±°μΉκ² λλ€. λ§ κ·Έλλ‘ ν΄λΉ element
λ₯Ό λ€μ μΉ νκ³ λ€μ flow(?) νλκ²μ΄λ€. react
λ₯Ό μ΄μ©νλ μ
μ₯μμ λ λλ§ μ΅μ νλ₯Ό μνν λ λ°λμ κ³ λ €ν΄μΌνλ νλͺ©μ΄κΈ°λ νλ€. μ΄ ν¬μ€ν
μμλ μ λ§€νκ² μκ³ μλ λκ°μ§μ κ°λ
μ μ νν μ§κ³ λμ΄κ°λλ‘ νκ² λ€.
The rendering process of a web page
κ·Έμ μμ λΈλΌμ°μ κ° μμλ₯Ό λ λλ§ν λ μ΄λ€ κ³Όμ μ κ±°μΉκ² λλμ§ μμ보μ.

κ°λ¨ν μμ½νλ©΄,
HTML
μparsing
ν΄μDOM Tree
λ₯Ό λ§λ€κ³ ,CSS
λ₯Όparsing
ν΄μ μ€νμΌ κ΅¬μ‘°μ²΄λ₯Ό λ§λ€μ΄λ΄λλ° μ΄λ₯ΌCSSOM Tree
λΌκ³ νλ€DOM Tree
μCSSOM Tree
μ΄ λμ μ΄μ©νμ¬Render Tree
λ₯Ό μμ±νλ€ (μ€μ νλ©΄μ ννλλNode
λ€λ‘ ꡬμ±)viewport
λ΄μμ κ°node
λ€μ μ νν μμΉμ ν¬κΈ°λ₯Ό κ³μ°νλ€ (Layout
)layout
κ³μ°μ΄ μλ£λλ©΄ μ΄μ μμλ€μ νλ©΄μ κ·Έλ¦°λ€ (Paint
)
Reflow(Layout change)
μμμ μ§μ΄λ³΄μλ λ λλ§ κ³Όμ μ κ±°μΉ λ€μ μ΅μ’
μ μΌλ‘ web page
κ° κ·Έλ €μ§λ€. νμ§λ§ μ΄κ²μ λλκ²μ΄ μλλ€. μ΄ν μ΄λ ν μ΄λ²€νΈμ λ°λΌ element
μ ν¬κΈ°, μμΉ λ± layout
μ λ³κ²½νλ©΄ κ·Έ μν₯μ λ°λ child node
, parent node
λ€μ ν¬ν¨νμ¬ λ€μ layout
κ³Όμ μ μννλ€. μ΄λ render tree
μ κ° element
μ ν¬κΈ°μ μμΉλ₯Ό λ€μ μ°μ°νκ² λλλ° μ΄λ₯Ό Reflow
λΌκ³ νλ€.
Reflow
μ κ²½μ° λ€μμ λνμ μΈ κ²½μ°μ λ°μνλ€
node
μ μΆκ° λλ μ κ±°element
μ μμΉ, ν¬κΈ°(margin
,padding
,width
,height
...)λ³κ²½font
λ³κ²½,image
ν¬κΈ° λ³κ²½page initial rendering
window resizing
JS
λ₯Ό μ΄μ©νDOM
μ λμ λ³ν
Repaint(Redraw)
reflow
μ²λΌ style
μ λ³κ²½νλ λͺ¨λ κ²μ΄ layout
μμΉμ μν₯μ λ°μ§λ μλλ€. background-color
, visibility
, outline
λ±μ style
λ³κ²½μμλ layout
μ λ³νμ§ μκ³ reflow
κ° μλ΅λ repaint
κ³Όμ λ§ λ°μνλ€.
reflow
μ repaint
λ₯Ό μμ ν νΌν μλ μλ€. repaint
μ κ²½μ° dom api
λ₯Ό ν΅ν΄ visibility
λ₯Ό λ³κ²½νμμλ, child node
λ€κΉμ§ λ€ κ²μνκΈ° λλ¬Έμ μ±λ₯μ΄ μ νλ μ μλ€. reflow
μ κ²½μ° ν΄λΉ μμμ child
, parent
λͺ¨λ layout
μ μλ‘ μ°μ°νκΈ° λλ¬Έμ λ μ¬κ°ν μ±λ₯μ νλ₯Ό μΌμΌν€κΈ°λ νλ€.
Reflow
λ₯Ό νΌνκ±°λ κ·Έ μν₯μ μ€μΌ μ μλ λͺκ°μ§ λ°©λ²μ λ€μκ³Ό κ°λ€.
inline style
μ μ΅λν μμ€λ€inline
μμstyle
μ΄ μ£Όμ΄μ§ κ²½μ°, νμ΄μ§ μ 체μ κ±Έμ³μreflow
κ° μμ°¨λ‘ λ°μνκ² λλ€. λ§μΌ μμκ²½μ°μλ μΈλΆμ€νμΌ class μ‘°ν©μΌλ‘ νλ²λ§ reflowλ₯Ό λ°μμν¨λ€animation
μ΄ λ€μ΄κ°element
μ κ²½μ°position: fix;
λλposition: absolute;
λ‘ μ§μ νλ€.animation
μ κ²½μ° μ΄λ¨μλ‘ μλΉνreflow
λ₯Ό λΆλ¬μΌμΌν¨λ€. μ΄ κ²½μ°μ μ λκ°μ§ μμ±μ μ¬μ©νμ¬ λ€λ₯Έ μμλ€μ μν₯μ λΌμΉμ§ μλλ‘ νλ©΄, ν΄λΉ μμλ§μ repaintλ§μ μ λ°νλ―λ‘ ν¨μ¨μ μ΄λ€JS
λ₯Ό ν΅ν΄style
λ³νλ₯Ό μ€ κ²½μ° κ°κΈμ νλ²μ μ²λ¦¬νλ€
// (X)
var newElement = document.getElementById('elem');
newElement.style.background = 'blue';
newElement.style.color = '#fff';
newElement.style.border = '1px solid #ccc';
// μλμ²λΌ λ°κΎΌλ€
// (O)
/* CSS */
// #elem1 { border:1px solid #000; color:#000; background:#ddd; }
// .coloring { border-color:#00f; color:#fff; background:blue; }
/* js */
document.getElementById('elem1').className = 'coloring';
table
λ μ΄μμμ μ€μΈλ€table
λ‘ κ΅¬μ±λ μμμ κ²½μ° μ μ§μ νμ΄μ§ λ λλ§μ΄ μ μ©λμ§ μμΌλ©°, λͺ¨λ load λκ³μ°μ°λ
νμ νλ©΄μ 보μ¬μ§λ€. λν μμ£Ό μμ λ³νλ§μ λtable
μ 체 λͺ¨λnode
μ λνreflow
λ₯Ό μ λ°νλ€κ³ νλ€
reflow
μ repaint
λ₯Ό κ³ λ €ν΄μ κ°λ°μ μ§ννλ κ²λ μ€μνμ§λ§, λ무 μ±λ₯/ν¨μ¨μ±μ μΉμ°μΉ κ²½μ° ν리ν°μ λ¬Έμ κ° μκΈΈ μ μλ€. μ μ ν trade-off
λ₯Ό μκ°νλ©΄μ κ°λ°μ μ§ννλ©΄ 보기μλ νλ₯νκ³ μ±λ₯μ μΌλ‘λ μ°μν λ©μ§ μΉνμ΄μ§κ° νμν κ²μ΄λ€.
- https://medium.com/@gneutzling/the-rendering-process-of-a-web-page-78e05a6749dc