reflow repaint

Posted by : on

Category : Frontend1

Reflow(๋ฆฌํ”Œ๋กœ์šฐ)

์ •์˜: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •. ๋ฐœ์ƒ ์‹œ๊ธฐ: DOM ์š”์†Œ์˜ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ, ์š”์†Œ ์ถ”๊ฐ€/์ œ๊ฑฐ, ์œˆ๋„์šฐ ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋“ฑ. ๋น„์šฉ: Reflow๋Š” ๋ ˆ์ด์•„์›ƒ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.

Repaint(๋ฆฌํŽ˜์ธํŠธ)

์ •์˜: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์†Œ์˜ ์Šคํƒ€์ผ(์ƒ‰์ƒ, ๋ฐฐ๊ฒฝ, ๊ทธ๋ฆผ์ž ๋“ฑ)์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ฆด ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ณผ์ •. ๋ฐœ์ƒ ์‹œ๊ธฐ: CSS๋กœ ์Šคํƒ€์ผ ์†์„ฑ ๋ณ€๊ฒฝ, ํ…์ŠคํŠธ ๋‚ด์šฉ ๋ณ€๊ฒฝ, ํด๋ž˜์Šค ๋ณ€๊ฒฝ ๋“ฑ. ๋น„์šฉ: Repaint๋Š” ๊ทธ๋ฆฌ๊ธฐ ์ž‘์—…์ด๋ฏ€๋กœ, Reflow๋ณด๋‹ค ๋น„์šฉ์ด ์ ์Šต๋‹ˆ๋‹ค. Reflow์™€ Repaint์˜ ์„ฑ๋Šฅ ์ฐจ์ด Reflow๋Š” ๋ ˆ์ด์•„์›ƒ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํฌ๋กค์ด๋‚˜ ์œˆ๋„์šฐ ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋“ฑ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Repaint๋Š” ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ์‹œ ๋ฐœ์ƒํ•˜๋ฉฐ, Reflow๋ณด๋‹ค ๋น„์šฉ์ด ์ ์Šต๋‹ˆ๋‹ค. ๋น„๊ต์  ๋œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  |   ๋ธŒ๋ผ์šฐ์ €       |
        |   (Browser)      |
        +------------------+
                 |
                 v
        +------------------+
        |   DOM ํŠธ๋ฆฌ        |
        |   (DOM Tree)      |
        +------------------+
                 |
                 v
        +------------------+
        |   ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ   | <--- Reflow (๋ฆฌํ”Œ๋กœ์šฐ)
        |   (Layout)       |
        +------------------+
                 |
                 v
        +------------------+
        |   ํŽ˜์ธํŒ…         | <--- Repaint (๋ฆฌํŽ˜์ธํŠธ)
        |   (Painting)     |
        +------------------+
                 |
                 v
        +------------------+
        |   ํ™”๋ฉด ์ถœ๋ ฅ       |
        |   (Rendering)    |
        +------------------+

๋ฆฌํ”Œ๋กœ์šฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  1. ์ผ๊ด„ ์ฒ˜๋ฆฌ (Batch Processing):

์—ฌ๋Ÿฌ DOM ์š”์†Œ์— ๋Œ€ํ•œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ. ์˜ˆ์‹œ: ์Šคํƒ€์ผ ์†์„ฑ์„ ํด๋ž˜์Šค์— ์ผ๊ด„ ์ ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ๋ณ€๊ฒฝ.

์ฝ”๋“œ ๋ณต์‚ฌ
// ์˜ˆ์‹œ: ์—ฌ๋Ÿฌ ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹  ํด๋ž˜์Šค ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ
document.body.classList.add('new-style');
  1. ๊ฐ€์ƒ ์š”์†Œ ์‚ฌ์šฉ:

:hover์™€ ๊ฐ™์€ ๊ฐ€์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜์— ๋ฐ˜์‘. CSS ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ Reflow๋ฅผ ์ค„์ž„.

/* ์˜ˆ์‹œ: ๊ฐ€์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ์ฒ˜๋ฆฌ */
.button:hover {
background-color: blue;
}
  1. ํฌ๊ธฐ ๊ณ ์ •:

์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”. ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์š”์†Œ์—๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”.

/* ์˜ˆ์‹œ: ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ • */
.fixed-size {
width:auto; height:auto;
}