BKJang / do-you-know-vanilla

๐ŸŒ This repository contains contents about Vanilla JS and project developed with Vanilla JS.
https://bkjang.github.io/do-you-know-vanilla
11 stars 1 forks source link

document.createDocumentFragment() #8

Open BKJang opened 5 years ago

BKJang commented 5 years ago

๐Ÿ™ Reference

BKJang commented 5 years ago

DocumentFragment

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 ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋‹ค์ˆ˜์˜ ์ ‘๊ทผ์„ ํ•„์š”๋กœํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์ถฉ๋ถ„ํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.