Open BKJang opened 5 years ago
Repaint
์ Reflow
๊ฐ ๋ง์์ง์๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋๋ง ์ฑ๋ฅ์ ๋๋ ค์ง๊ฒ ๋๋ค.
์ฆ, ์ด๋ฅผ ์ค์ผ์๋ก ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
//Before
for(var i=0; i<100; i++) {
document.getElementById('container').style.padding = i + 'px';
}
//After
var container = document.getElementById('container');
for(var i=0; i<100; i++) {
container.style.padding = i + 'px';
}
//Before
var container = document.getElementById('container');
container.style.padding = "20px";
container.style.border = "10px solid red";
container.style.color = "blue";
//After cssText
container.style.cssText = 'padding:20px;border:10px solid red;color:blue;';
//After class
container.className = 'test';
<div id="animation" style="background:blue;position:absolute;"></div>
ํ๋ ์์ ๋ฐ๋ผ reflow๋น์ฉ์ด ๋ง์ ์ ๋๋ฉ์ด์
ํจ๊ณผ์ ๊ฒฝ์ฐ์ ๋
ธ๋์ position
์ absolute
๋ fixed
๋ก ์ฃผ๋ฉด ์ ์ฒด ๋
ธ๋์์ ๋ถ๋ฆฌ๋๋ค.
์ด ๊ฒฝ์ฐ์, ์ ์ฒด ๋
ธ๋์ ๊ฑธ์ณ Reflow ๋น์ฉ์ด ๋ค์ง ์์ผ๋ฉฐ ํด๋น ๋
ธ๋์ Repaint ๋น์ฉ๋ง ๋ค์ด๊ฐ๊ฒ ๋๋ค.
ํ ์ด๋ธ๋ก ๊ตฌ์ฑ๋ ํ์ด์ง ๋ ์ด์์์ ๊ฒฝ์ฐ, ์ ์ง์ ํ์ด์ง ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๊ณ ๋ชจ๋ ๊ณ์ฐ์ด ์๋ฃ๋ ํ, ํ๋ฉด์ ๋ ๋๋ง์ด ๋๊ธฐ ๋๋ฌธ์ ํผํ๋๊ฒ ์ข๋ค.
Virtual DOM์ React๋ Angular์ ๊ฐ์ UI/UX๊ธฐ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํ๋ ์์ํฌ์์์ ์ปจ์ ์ด ๋๋ ๊ฐ๋ ์ด๋ค.
๊ธฐ์กด์ javascript๋ jQuery์์ ์ฌ์ฉ๋๋ DOM ์ง์ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ ๋ reflow์ repaint์ ์ฐ๊ด์ฑ๋ ๋นผ๋์ ์ ์๋ค.
DOM์ ์ ์ ์ด๋ค. DOM ์์์ ์ ๊ทผํ์ฌ ๋์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฃผ์ด layout์ ๋ฐ๊พธ๊ฒ ๋๋ฉด reflow์ repaint๊ฐ ์ผ์ด๋๊ฒ ๋๋ค.
์ด ๊ณผ์ ์์ ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ผ์๋ก recalculateํ ์์ด ๋์ด๋๊ณ ์ด๋ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด, ์ ์ฒด UI ๋ฅผ Virtual DOM ์ ๋ฆฌ๋ ๋๋ง.
- ์ด์ Virtual DOM ์ ์๋ ๋ด์ฉ๊ณผ ํ์ฌ์ ๋ด์ฉ์ ๋น๊ต.
- ๋ฐ๋ ๋ถ๋ถ๋ง ์ค์ DOM ์ ์ ์ฉ.
์ฆ, Virtual DOM์ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ๋ ๋ถ๋ถ(Component)๋ง rerenderingํ๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋ ๋, ๋ ์ด์์ ๊ณ์ฐ์ด ํ ๋ฒ๋ง ์ผ์ด๋๊ฒ ๋๋ค.
๐ Reference