- Published on
๐ป Critical Rendering Path
- Authors

- Name
- ์ต์์ค (Youngjun Choi)
์ฐ๋ฆฌ๊ฐ ๋น์ฐํ๊ฒ ์๊ฐํ๊ณ ์๋ ์ปดํจํฐ๋ฅผ ์ผ์,ํฌ๋กฌ์ ๋๋ฅด๋ฉด ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค๋ ๊ฒ์ ์ฌ์ค ์ด๋ง์ด๋งํ ์์ ์ด ๋ค์์ ๋์๊ฐ๊ณ ์๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋น url์ ์๋ฒ์ ์์ฒญํ๊ณ ํ์ํ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ์๋ต์ผ๋ก ๋ณด๋ด์คฌ์ ๋, ๊ทธ ๊ฒฐ๊ณผ ( html, css, javascript )๋ฅผ ์ฐ๋ฆฌ์๊ฒ ๊ทธ๋ ค์ฃผ๋ ๊ณผ์ , Critical Rendering Path์ ๋ํด ์์๋ณด์.
CRP์ ์ ์
Critical Rendering Path๋ ๋ธ๋ผ์ฐ์ ์์ html, css, javascript๋ฅผ ํด์ํด์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ๊ณผ์ ์ด๋ผ๊ณ ์ ์ํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ค, html, css, javascript๋ฅผ ๋ฐ์ผ๋ฉด ๊ทธ๊ฑธ ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ ์๋๋ผ, ๋จผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๊ฒ ๋ณํํด์ค์ผํ๋ค. ์ด๋ html parser์ css parser๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ์ฝ์ด, ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ๊ตฌ์กฐ๋ก ํ ํฐํ๋ฅผ ํ๋ค. ์ด ํ ํฐ์ ๊ฒฐ๊ณผ๋ฌผ๋ค์ ํ๋ฒ์ฏค ๋ค์ด๋ณธ ์ ์๋ DOM๊ณผ CSSOM์ด๋ค.
๊ณต๋ถํ๋ฉด์ ๋จผ์ ์ ๋ฆฌํด๋ ๊ฒ์ ๊ฐ ํ์ผ์ ์ฝ์ด๋๊ฐ๋ ๊ณผ์ ์ ์ฌ์ฉ๋๋ ์์ง์ด ๋๊ฐ์ง๋ผ๋ ์ ์ด์๋ค. ํ๋๋ ๋ ๋๋ง์ ํด์ฃผ๋ "๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง", ๋ค๋ฅธ ํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด์ฃผ๋ "์๋ฐ์คํฌ๋ฆฝํธ ์์ง"์ด๋ค. ์ ๋ฌ๋ฐ์ html์ ์ฝ๋ ๊ฒ์ ๋ ๋๋ง ์์ง, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ณ DOM์ ์กฐ์ํ๋ ๋ฑ์ ์ผ์ ํ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ค.
CRP ์ธ๋ถ๊ณผ์
์ธ๋ถ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฐ๊ฐ์ ๊ณผ์ ์ ๋ํด ์์๋ณด์.

DOM ํธ๋ฆฌ
DOM์ Document Object Model๋ก HTML parser๋ฅผ ์ด์ฉํด ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ Tree ๊ตฌ์กฐ๋ก ๋ณํํด ๋ง๋ ๊ตฌ์กฐ๋ค. ๋ด๊ฐ ์์ฑํ๋ html ํ๊ทธ๋ค์ DOM ํธ๋ฆฌ์ Node๋ก ๋ณํ๋๊ฒ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ tree๊ตฌ์กฐ๋ฅผ ํตํด ํ๊ทธ๋ค์ ๋ถ๋ชจ๊ด๊ณ๋ฅผ ์ดํดํ ์ ์๋ค.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link href="style.css" rel="stylesheet" />
<title>Critical Path</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg" /></div>
</body>
</html>

๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ๋ง๋ค์ด์ง DOM tree๋ ์ด๋ป๊ฒ ์คํ์ผ๋ง์ด ๋๋ ๊ฑธ๊น?
CSSOM ํธ๋ฆฌ
cssํ์ผ์ ๋ณดํต html์ head์ ๋ฃ์ด์ฃผ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด html์ ์ฝ๋ค๊ฐ link:css๋ฅผ ๋ง๋๋ฉด html ํ์ฑ์ ๋ฉ์ถ๊ณ css ํ์ผ์ ๋ถ๋ฌ์จ๋ค. ๋ถ๋ฌ์จ cssํ์ผ์ css parser์ ์ํด ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ํธ๋ฆฌ๊ตฌ์กฐ์ธ CSSOM (CSS Object Model)์ ๋ง๋ค๊ฒ ๋๊ณ , ๋ธ๋ผ์ฐ์ ๋ ๋ง๋ tree๊ตฌ์กฐ๋ฅผ ํตํด์ CSS์ ๊ธฐ๋ณธ ์๋ฆฌ์ธ Cascading rule (์๋๋ก ๋ด๋ ค์ฌ ์๋ก, ํด๋น ํ๊ทธ์ ๊ตฌ์ฒด์ ์ธ styling์์์ผ์๋ก ์ฐ์ ์์๊ฐ ๋๋ค)๋ฅผ ์ ์ฉํ ์ ์๋ค. CSSOM์ ๋ง๋ ์ดํ์ ๋ค์ htmlํ์ฑ์ด ๋ฉ์ถฐ์ง ๊ณณ์ผ๋ก ๋์๊ฐ ๋ค์ html์ ํ์ฑํ๋ค.
body {
font-size: 16px;
}
p {
font-weight: bold;
}
span {
color: red;
}
p span {
display: none;
}
img {
float: right;
}

์ด๋ ๊ฒ ๋ง๋ ๊ฐ๊ฐ์ Tree๋ค์ ์ด๋ป๊ฒ ํฉ์น ๊น?
Render Tree
Render Tree๋ ์์ ์ ๋ฆฌํ DOM tree์ CSSOM Tree๋ฅผ ํฉ์ณ์, DOM Tree์ Node์ CSSOM์์ ๊ฒฐ์ ๋ ์คํ์ผ๋ง์ ์ ์ฉํ ๊ตฌ์กฐ๋ค. Render Tree์์ ํน์ง์ ์ธ ๊ฒ์ ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ ค์ฃผ์ง ์์ ๋ถ๋ถ (html์ head๋ display:none์ผ๋ก ์คํ์ผ๋ง๋ node)์ ์ ์ธํ๊ณ ๋ณด์ฌ์ค ๋ถ๋ถ๋ง ๋ด๋๋ค๋ ๊ฒ์ด๋ค.

๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๊ฐ ์์ฑํ Javascript๋ ์ด๋ป๊ฒ ์๋ํ๋ ๊ฑธ๊น?
Javascript
์๋ฐ์คํฌ๋ฆฝํธ๋ cssํ์ผ๊ณผ ๋์ผํ๊ฒ html์ ํ์ฑํ๋ ๊ณผ์ ์์ ๋ ๋๋ง ์์ง์ด script๋ฅผ ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM์์ฑ์ ์ค์งํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ์ฑ๊ณผ ์คํ์ ์งํํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด AST(abstract syntax tree)๋ฅผ ์์ฑํ ํ์ ์คํํ๋ค. ์ด๋ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ๋ค๋ฉด ๋ ๋ํธ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋๊ฒ ๋๊ณ , ๋ณ๊ฒฝ๋ ๋ ๋ํธ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ ๋ฆฌํ๋ก์ฐ(layout ๊ณ์ฐ์ ๋ค์ ์คํ)์ ๋ฆฌํ์ธํธ(๋ค์ paint๊ณผ์ ์ ๋ค์ ์งํ)๋ฅผ ํ๋ค.
์ด๋ ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณ๊ฒฝ๊น์ง ํ ํ์ ๋ ๋ํธ๋ฆฌ๋ฅผ ๋ง๋ค์์ง๋ง, ์ด๋์ ์์๋ฅผ ๊ทธ๋ฆด์ง ์ ํด์ง์ง ์์๋ค.
Layout
Layout๊ณผ์ ์ Render Tree๋ก ์ด๋ค์์๋ก ์ด๋ป๊ฒ ๊ทธ๋ฆด์ง๋ฅผ ๊ฒฐ์ ํ ํ์ ์ด๋์ ๊ทธ๋ฆด์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด๋ค. ํด๋น์์์ ๋ถ๋ชจ์์๊ด๊ณ, css์์ ์ ์๋ ํฌ๊ธฐ์ ์์น๋ฅผ ์ด์ฉํด ๊ณ ์ ๋ ๊ฐ์ผ๋ก ๋ณํํ๋ค.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Critial Path: Hello world!</title>
</head>
<body>
<div style="width: 50%">
<div style="width: 50%">Hello world!</div>
</div>
</body>
</html>

์ด์ ์์น๊น์ง ๊ณ์ฐ์ด ๋๋ฌ๋ค. ๋ค์์ผ๋ก๋ ๋๋์ด ์ค์ ๋ก ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ด๋ค.
Paint์ composite
Paint๋ ๋ธ๋ผ์ฐ์ ์์๋ฅผ ์ค์ ํฝ์ ๋จ์๋ก ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ์์๋ฅผ ๊ทธ๋ฆด ๋ ํ ์ธต์ ๋ค ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ์ธต์ผ๋ก ๋๋ ์ ๊ทธ๋ฆฐ๋ค๋ ์ ์ด๋ค. ํ๋์ ์ธต์ ๊ทธ๋ฆฌ์ง ์๊ณ ์ฌ๋ฌ๊ฐ์ ์ธต๋ก ๋๋ ์ ๊ทธ๋ฆฌ๋ ์ด์ ๋, ํ๋ surface์ ๊ทธ๋ฆด ๊ฒฝ์ฐ, ๋ด๋ถ ์์์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด๋ฅผ ๋ค์ ๊ทธ๋ ค์ผํ๋ ๋จ์ ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์น๋ ์คํ์ผ๋ง ์์๊ฐ ๋ฐ๋ ์ ์๋ ๋ถ๋ถ์ ๋ค๋ฅธ ์ธต์ผ๋ก ๊ทธ๋ ค์ง๋ค. ๋ณํ๋ ๋ถ๋ถ์ ๋ฐ๋ก ์ธต์ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก css์ will-change์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค.
์ด๋ ๊ฒ ์ฌ๋ฌ ์ธต์ผ๋ก ๊ทธ๋ ค๋์ ์์๋ค์ ํ๋์ ์ธต์ผ๋ก ํฉ์น๋ ๊ณผ์ ์ composite์ด๋ผ๊ณ ํ๋ค.

CRP์ ์ฑ๋ฅ
์์ ์ธ๋ถ๊ณผ์ ๋ค์ ํตํด์ ์ด๋ป๊ฒ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์์ฒญํ ํ๋ฉด์ด ๊ทธ๋ ค์ง๋ ์ง๋ฅผ ์์๋ณด์๋ค. ์ด์ ์ค์ํ ์ ์ ์ด๋ฌํ ๊ณผ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ ์ฝ๋ฉํ ์ ์์ด์ผํ๋ค. ๊ฐ ๊ณผ์ ์์ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ ์์ ํ๋ค๋ฉด, ํจ์ฌ ๋น ๋ฅด๊ฒ ํ๋ฉด์ด ๊ทธ๋ ค์ง ์ ์๋ค. ์ฌ๊ธฐ์ ๊ณ ๋ คํด์ผํ ์ค์ํ ์ ์ ๊ณผ์ ์ ์๋ถ๋ถ์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด ์ดํ ๊ณผ์ ๋ ๋ค์ ์๋ก ์ผ์ด๋๋ค๋ ์ ์ด๋ค.
๋ง์ฝ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด layout์ด ์๋ก ์ผ์ด๋์ผํ๋ค๋ฉด layout์ด ๋ณ๊ฒฝ๋ ์ดํ ๊ณผ์ ์ธ paint์ composite๋ ๋ค์ ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ ๋ณํ๊ฐ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ์ด๋์ํฌ ๋ position์ ๋ณํ์ํค๋ ๊ฒ(layout) ๋ณด๋ค transform์ ์ด์ฉํด (transform) ์์๋ฅผ ์ด๋์ํค๋ ๊ฒ ๋ ์ฑ๋ฅ์ด ์ข์ ์ด์ ๊ฐ ๋๋ค.

์ด๋ฌํ ๋น๊ต๋ฅผ ์ํด์๋ https://csstriggers.com/์ ๊ฐ์ ์ฌ์ดํธ๋ฅผ ์ฐธ์กฐํด ๋ธ๋ผ์ฐ์ ๋ณ๋ก ์ ์ ํ styling์ ์ ํ์ด ๊ฐ๋ฅํ๋ค.
๋ฆฌ์กํธ์ CRP
๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ DOM์์๋ฅผ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋ ์์ ๋ค์ ๋ง์ด ํด์๋ค. CRP๋ฅผ ์ดํดํ๊ณ ๋๋ฉด ์ฌํ๊น์ง ์์ ํ๋ ๊ณผ์ ์ ๋ํด ์๋ฌธ์ด ์๊ธด๋ค. DOM์ ์ง์ ๊ฑด๋๋ฆฌ๋ฉด ์ดํ์ layout, paint, composite๋ ๋ค ๋ค์ ์ผ์ด๋์ผํ๊ณ ํ๋ฉด์ด ๊น๋นก์ผ ๊ฒ ๊ฐ์๋ฐ ์ ์ผ์ด๋์ง ์์์๊น?
์ด์ ๋ฅผ ์ฐพ์๋ณด๋ ํผ์์ ์ผ๋ก๋ง ์๊ณ ์๋ ๋ฆฌ์กํธ์ V-DOM๊ณผ Reconcilation ๋๋ถ์ด์๋ค.
V-DOM
๋ฆฌ์กํธ๋ ๊ฐ์ DOM, V-DOM(Virtual DOM)์ ๊ฐ์ง๊ณ ์๋ค. ๋ฆฌ์กํธ๋ฅผ ์ด์ฉํ๋ฉด ์ํ์ ๋ฐ๋ผ UI์ ๋ณํ๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ณํ์ ํญ์ ์ฆ๊ฐ์ ์ผ๋ก DOM์ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ, V-DOM์ ์ ๋ฐ์ดํธ ํ๊ณ ์ค์ DOM์ ๋ฐ์ํ ํ์ด๋ฐ์ ๊ด๋ฆฌํ๋ "์ค์ผ์ค๋ฌ"๊ฐ ์์ด, ๋ณํ๋ค์ ๋ชจ์์ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ state๋ฅผ ๋ฐ๊พธ์์ ๋ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ๋์ง ์์ ๋๊ฐ ์๊ณ , "setState๊ฐ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ค"๋ ์๋ฏธ๊ฐ ์ฌ๊ธฐ์ ์๋ค. V-DOM ๋๋ถ์ ์ ๋ง ํ์ํ ๋ถ๋ถ์๋ง ์ ๋ฐ์ดํธ๊ฐ ์ผ์ด๋๊ธฐ ๋๋ฌธ์, ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ด ๊ฐ๋ฅํ๊ณ ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ Reconcilation์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.

๊ทธ๋ฌ๋ฉด Reconcilation์์ V-DOM๊ณผ ์ค์ DOM์ ์ด๋ป๊ฒ ๋น๊ต๋ ๊น?
Reconcilation
react์์ ๋ฆฌ๋๋๋ง์ด ํ์ํ ๊ฒฝ์ฐ๋ props๋ ์ํ๊ฐ ๋ณํํ ๊ฒฝ์ฐ๋ค. ์ํ๋ณํ์ ๋ฐ๋ผ V-DOM์ ์ ๋ฐ์ดํธํ๊ณ ์ค์ DOM๊ณผ ๋น๊ตํด, ํ์ํ ๋ถ๋ถ์ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ Reconcilation๋ผ๊ณ ํ๋ค. Reconcilation์ ํ๊ธฐ ์ํด ๋ณํ์ ๋ฐ๋ผ ์ด๋ค ์์๊ฐ ๋ฐ๋์๋์ง ์ผ์ผํ ๋น๊ตํ๋ค๋ฉด ๋ฆฌ์กํธ ๊ณต์ํํ์ด์ง์์๋ O(n^3)์ ์๊ฐ๋ณต์ก๋(n์ tree ์์ ์) ๋ฅผ ๊ฐ๋๋ค๊ณ ํ๋ค. ์ผ์ผํ ๋ค ๋น๊ตํ์ง ์๊ธฐ ์ํด์ ๋ฆฌ์กํธ๋ ๋๊ฐ์ง ์ ์ ๋ฅผ ์ด์ฉํ๋ค.
์ฒซ๋ฒ์งธ๋ element type์ด ๋ฌ๋ผ์ง๋ฉด ๋ค๋ฅธ tree๋ฅผ ๋ง๋ ๋ค๋ ์ ์ด๋ค. aํ๊ทธ์์ imgํ๊ทธ๋ก ๋ฐ๋๋ค๋ฉด ์์ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค๋ ์๋ฏธ์ด๋ค. ๋ถ๋ชจ node๊ฐ ๋ฌ๋ผ์ง๋ฉด ์ผ์ผํ ์์๊น์ง ๋น๊ตํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด tree๋ก ๋ฐ๊พธ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค. ์ํ์ ๋ถ๋ณ์ฑ์ ์ ์ ํ ๋์์ด๋ค. ์ํ๋ฅผ ๋ณํ์ํฌ ๋ ํญ์ ์๋ก์ด ์ํ๋ก ๋ณํ์์ผ์ค์ผํ๋ค๋ ์์น์ด ์ฌ๊ธฐ์ ๊ธฐ์ธํ๋ค. Object์ ์ฐธ์กฐ๊ฐ์ ์ด์ฉํ ์์ ๋น๊ต๋ฅผ ํตํด ๊ฐ์ ์ํ์ธ์ง ๋ค๋ฅธ ์ํ์ธ์ง ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค ๋๋ ์๋ก์ด ๊ฐ์ ํ ๋นํด ์ฃผ์ด์ผํ๋ค.
๋๋ฒ์งธ๋ก ๊ฐ๋ฐ๊ณผ์ ์์ key๋ฅผ ์ด์ฉํด ๋ฌ๋ผ์ ธ์ผํ ๋ถ๋ถ์ ์๋ ค์ค ์ ์๋ค๋ ์ ์ด๋ค. react๋ฅผ ๊ฐ๋ฐํ๋ฉด์ map์ผ๋ก ๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ ๋ ์์ฃผ ๋ง์ฃผํ๋ ์๋ฌ์๋๋ฐ ์ ๋ฆฌ์กํธ๊ฐ ์๋ฌ๋ก ๋์ ธ์ฃผ๋์ง ์ ์ ์๋ ๋ถ๋ถ์ด๋ค. key๋ฅผ ์ด์ฉํด์ ๋ฐ๋์ด์ผํ๋ ์์๋ฅผ ์๋ ค์ค์ผ๋ก์จ ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.

์ ๋๊ฐ์ง ์ ์ ๋ฅผ ์ด์ฉํด V-DOM๊ณผ ์ค์ DOM์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์ฒ๋ฆฌํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ๋น ๋ฅด๊ฒ DOM์์ ๋ณํ๋์ผํ ๋ถ๋ถ์ ์ฐพ์ ์ ์๊ณ , ์ฐพ์ ๋ถ๋ถ์ ์ ์ ํ ํ์ด๋ฐ์ ํ๋ฒ์ ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ์ ๋ณด์ฅํ ์ ์์ด, ๊น๋นก์์์ด ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค.
๋ง์น๋ฉฐ
์ค์ฝํ, ์คํ์ปจํ ์คํธ,ํด๋ก์ ๋ฅผ ๊ณต๋ถํ ๋๋ ๋๊ผ์ง๋ง ์ฐ๋ฆฌ๊ฐ ๋น์ฐํ๊ฒ ์ฐ๊ณ ์๋ ๊ฒ ๋ค์์ ๋์๊ฐ๊ณ ์๋ ์์ ๋ค์ ์๊ฒ ๋๋ฉด ๊น์ง ๋๋ผ๊ฒ ๋๋ค. ์ด๋ ๊ฒ ๋ง์ ์์ ์ด ๋๊ณ ์๋ค๋... "๋๊ตฐ๊ฐ ํ๋ ๋ชจ์ต์ด ์ฌ์๋ณด์ธ๋ค๋ฉด ๊ทธ์ฌ๋์ ๊ทธ๋ถ์ผ์ ๊ณ ์๋ค"๋ผ๋ ๋ง์ด ์๋ฏ์ด ๊ทธ๋งํผ์ ์ถ์ํ๊ฐ ์ ๋์ด์์ด ์ฌ์ฉ์๋ ๊ทธ๋ฐ ๋ถ๋ถ๋ค์ ์์ง ๋ชปํด๋ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ ๋๋๋ค. CRP๋ฅผ ์ด์ ์ ์๊ณ ๋ ์์์ง๋ง ๋ฆฌ์กํธ์์๋ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง์ ๋ํด ๋น์ด์๋ ๋ถ๋ถ์ด์๋๋ฐ, ์ด๋ฒ๊ธฐํ์ ์ฐ๊ฒฐ์ด ๋๋ฉด์ ์ฑ์ธ ์ ์๋ ์ข์ ๊ธฐํ์๋ค. ๋ฆฌ์กํธ๋ฅผ ์ฐ๋ ์ด์ ๋ก ๋จ์ํ ์์ฅ์์ ๋ง์ด ์ฐ์ฌ์๋ผ๊ณ ๋๋ตํ๊ธฐ ๋ณด๋ค๋, SPA์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ค์ํ interaction์ ํ๋ฉด์ DOM์์๋ค์ ๊ฑด๋๋ฆฌ๊ฒ ๋๋๋ฐ, ์ด๋ V-dom๊ณผ reconcilation๊ณผ ๊ฐ์ ๋ด๋ถ ๋์์ผ๋ก ์ต์ ํ๊ฐ ๋ ๋ ๋๋ง์ ๋ณด์ฅํด์ฃผ๊ธฐ ๋๋ฌธ์๋ผ๊ณ ๋๋ตํ๋ฉด ๋ ์ข์ ๋๋ต์ด ๋ ๊ฒ ๊ฐ๋ค.