Open BKJang opened 5 years ago
DocumentFragment
๋ฅผ ํ์ฉํ๋ ๊ฒ์ reflow
๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ค.
<body>
<select id="timer">
</select>
</body>
function addElements() {
var target = document.getElementById('timer');
for (var i = 0; i < 24; i++) {
var option = document.createElement('option');
option.innerText = i;
target.appendChild(option);
}
}
์ ์ฝ๋๋ 0์๋ถํฐ 23์๊น์ง์ option
์๋ฆฌ๋จผํธ๋ฅผ ์
๋ ํธ ๋ฐ์ค์ ์ถ๊ฐํ๋ ์์ ์ด๋ค.
timer
์
๋ ํธ๋ฐ์ค์ 0๋ถํฐ 23๊น์ง ๋ฐ๋ณต์ ๋๋ ค ๋งค๋ฒ ์
๋ ํธ ๋ฐ์ค์ ์๋ฆฌ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ณ ์๋ค. 24๋ฒ์ DOM ๋ ์ด์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ฒ ๋๊ธฐ ๋๋ฌธ์ 24๋ฒ์ reflow
์ repaint
๊ฐ ๊ฐ๊ฐ ์ผ์ด๋๊ฒ ๋๋ค.
DocumentFragment
๋ฅผ ํ์ฉํ์ ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ DocumentFragment
๊ฐ์ฒด๋ ํ์ฑํ๋ DOMํธ๋ฆฌ์ ์ผ๋ถ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ DocumentFragment
๊ฐ์ฒด์์ ์ผ์ด๋๋ ๋ณ๊ฒฝ์ฌํญ์ DOM์ ์ํฅ์ ์ฃผ์ง ์๋๋ค. ์ฆ, reflow
๋ฅผ ์ผ์ผํค์ง ์์ผ๋ฉฐ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์๊ฒ ๋๋ค.
function addElements() {
var target = document.getElementById('timer');
var docFrag = document.createDocumentFragment();
for (var i = 0; i < 24; i++) {
var option = document.createElement('option');
option.innerText = i;
docFrag.appendChild(option);
}
target.appendChild(docFrag.cloneNode(true));
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด DOM๋ ์ด์์์ ๋ณ๊ฒฝ์ํค๋ ๊ฒฝ์ฐ๋ timer
์
๋ ํธ ๋ฐ์ค ์๋ฆฌ๋จผํธ์ ์ถ๊ฐํ ๋ ๋ฐ์ํ๋ค. ์ฆ, DocumentFragMent
๊ฐ์ฒด๋ฅผ ์
๋ ํธ ๋ฐ์ค ์๋ฆฌ๋จผํธ์ ์ถ๊ฐํ ๋ 1๋ฒ๋ง DOM ๋ ์ด์์์ด ๋ณ๊ฒฝ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ 24๋ฒ์ reflow
์ repaint
๊ฐ ์ผ์ด๋๋ ๊ฒ์ 1๋ฒ์ฉ๋ง ์ผ์ด๋๋๋ก ์ค์ผ ์ ์๊ฒ ๋๋ค.
์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ์๋ reflow
๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์์ง์ ์ต์ ํํ๊ธฐ ๋๋ฌธ์ DocumentFragment
๋ฅผ ํตํ ์ฑ๋ฅ ํฅ์์ ์ฒด๊ฐํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ฌ๋ DOM ๊ฐ์ฒด์ ๋ํ ๋ค์์ ์ ๊ทผ์ ํ์๋กํ๋ ์์
์ ์ํํด์ผํ๋ ์ํฉ์์๋ ์ถฉ๋ถํ ์ฑ๋ฅ ํฅ์์ ์ฒด๊ฐํ ์ ์๋ค.
๐ Reference