๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

FrontEnd+

์›น ์„ฑ๋Šฅ ํ•ต์‹ฌ๊ฐœ๋… - ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ Œ๋”๋ง ํŒจ์Šค

 

 

๐Ÿ– ๋ฒ„๋ฒ…์ž„(Jank) ๋ฉˆ์ถฐ!

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๊ธฐ๋“ค์€ 1์ดˆ์— 60๋ฒˆ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. ์ด ์ฃผ๊ธฐ๋ฅผ 60Hz ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ , ์ดˆ๋‹น ํ”„๋ ˆ์ž„ 60 ์ฆ‰, 60 fps(frames per second)๋ผ๊ณ ๋„ ํ‘œํ˜„ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ”„๋ ˆ์ž„์„ 60๋ฒˆ๋ณด๋‹ค ์ ๊ฒŒ ๊ฐ€์ ธ์˜ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ™”๋ฉด์ด '๋ฒ„๋ฒ…์ด๊ณ  ์žˆ์Œ'์„ ์•Œ์•„์ฑ„๊ณ  ์‹œ๊ฐ์  ๋ถˆํŽธํ•จ์„ ๋Š๋ผ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด 1์ดˆ์— 60๊ฐœ์˜ ํ”„๋ ˆ์ž„์„ ์ค€๋น„ํ•˜๋ ค๋ฉด, ์–ผ๋งˆ๋งŒํผ์˜ ์‹œ๊ฐ„๋™์•ˆ ํ•œ ํ”„๋ ˆ์ž„์„ ์ค€๋น„ํ•ด์•ผ ํ•˜๋Š”๊ฑธ๊นŒ? 1000ms ๋ฅผ 60๊ฐœ๋กœ ๋‚˜๋ˆ„๋ฉด ์•ฝ 16ms์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋Ÿฐ์ €๋Ÿฐ ์žก์ผ๋„ ์ฒ˜๋ฆฌํ•ด์•ผํ•ด์„œ ์‹ค์ œ๋กœ๋Š” 10 ~ 12ms ๋งŒ์— ์ค€๋น„ํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ–ผ ํ”„๋ ˆ์ž„์€ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์š”

๋‚˜์˜ ์•ฑ์˜ ํ”„๋ ˆ์ž„์†๋„๋ฅผ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ”„๋ ˆ์ž„์„ ์–ด๋–ป๊ฒŒ ๋ Œ๋”ํ•˜๋Š”์ง€๋ถ€ํ„ฐ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ Œ๋”๋ง ํŒจ์Šค(Critical Rendering Path) ๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š” ์ด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ GET ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
2. ์„œ๋ฒ„๋Š” HTML์„ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ด์ค€๋‹ค.
3. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ›์€ HTML์„ ํŒŒ์‹ฑํ•ด์„œ DOM์„ ๊ตฌ์„ฑํ•œ๋‹ค.
4. CSSํŒŒ์ผ๊ณผ ๋ธŒ๋ผ์šฐ์ € ์—์ด์ „ํŠธ๋ฅผ ํ•ฉ์ณ CSSOM์„ ๊ตฌ์„ฑํ•œ๋‹ค.
5. DOM๊ณผ CSSOM์„ ํ•ฉ์ณ Render Tree๋ฅผ ๋งŒ๋“ ๋‹ค. (Recalcuates styles)
6. ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐํ•œ๋‹ค.
7. ์‹ค์ œ ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ํ”ฝ์…€๋‹จ์œ„๋กœ ํ‘œํ˜„ํ•œ๋‹ค. (ํŽ˜์ธํŠธ)
8. ๋ ˆ์ด์–ด๋ฅผ ํ•ฉ์„ฑํ•œ๋‹ค. (์ปดํฌ์ง€ํŠธ)

 

์ฐธ๊ณ ๋กœ ๋ Œ๋”ํŠธ๋ฆฌ์—๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ํฌํ•จ๋œ๋‹ค.

๋ Œํ„ฐํŠธ๋ฆฌ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ ๋ Œ๋”ํŠธ๋ฆฌ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ
    - ::after์™€ ๊ฐ™์€ pesudo elemnt
    - height: 0 ์ธ ํƒœ๊ทธ
    - position: ablsolute, left: 100% ์ธ ํƒœ๊ทธ
    - head ํƒœ๊ทธ
    - script ํƒœ๊ทธ
    - display: none ์ธ ํƒœ๊ทธ

 

๋ ˆ์ด์•„์›ƒ - ํŽ˜์ธํŠธ - ์ปดํฌ์ง€ํŠธ ๋‹จ๊ณ„
ํŽ˜์ธํŠธ ๋‹จ๊ณ„์˜ ๋ฒกํ„ฐ ๋ ˆ์Šคํ„ฐํ™”

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ˜ํ”Œ ์‚ฌ์ดํŠธ ์˜ ๊ฒฝ์šฐ์—, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„์—์„œ body ์ž์ฒด์˜ width๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๊ณผ body์˜ ์ž์†์ธ ํŠน์ • div์˜ width๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๋” ๋งŽ์€ ์ž‘์—…์„ ํ•„์š”๋กœ ํ• ๊นŒ?

์ •๋‹ต์€ '๋‘˜ ๋‹ค ๊ฐ™์€ ์–‘์˜ ์ž‘์—…์„ ์š”๊ตฌํ•œ๋‹ค.' ์ด๋‹ค. ์–ด๋Š ๋…ธ๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š”์ง€ ์•Œ๋”๋ผ๋„ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์ด ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋ ์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ „์ฒด ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ์žก์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ ˆ์ด์•„์›ƒ์— ๋ณ€ํ™”๊ฐ€ ์žˆ์œผ๋ฉด ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ๊ธฐ์กด์˜ ๋ ˆ์ด์•„์›ƒ์„ ์ „๋ถ€ ๋ญ‰๊ฐœ๊ณ  ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ์žก๋Š”๋‹ค.

์ด ๊ณผ์ •์€ ํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ - [Performance] ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋ ˆ์ด์•„์›ƒ์˜ '์Šค์ฝ”ํ”„'๊ฐ€ ์ „์ฒด ๋ฌธ์„œ(whole document)๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ๋ ˆ์ด์•„์›ƒ ์Šค์ฝ”ํ”„๋ฅผ ์ข๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ „๋žต์ ์œผ๋กœ CSS๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ ˆ์ด์•„์›ƒ ๋ฐ”์šด๋”๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ ๋ฐ”์šด๋”๋ฆฌ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด ๋ฌธ์„œ๊ฐ€ reflow๋˜์ง€ ์•Š๊ณ  ํ•ด๋‹น scope๋งŒ reflow๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ด์•„์›ƒ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. (์ฐธ๊ณ : Introducing 'layout boundaries')

 

โญ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค์„ฏ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„ ์ค‘ ์ผ๋ถ€๋Š” ํ•ญ์ƒ ์‹คํ–‰๋˜๋ฉฐ, ์ผ๋ถ€๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ๋žต๋˜๊ธฐ๋„ ํ•œ๋‹ค. 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://developers.google.com/web/fundamentals/performance/rendering

1. layout ์†์„ฑ์„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ 

Style > Layout > Paint > Composite 

position, padding, overflow, width, top ๋“ฑ์ด ํ•ด๋‹น๋œ๋‹ค.

2. paint-only ์†์„ฑ๋งŒ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ

Style > Paint > Composite

shadow, color, background-image, opacity, z-index ๋“ฑ์ด ํ•ด๋‹น๋œ๋‹ค.

3. compositing-only ์†์„ฑ๋งŒ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ

Style > Composite

transform, orphans, cursor ๋“ฑ์ด ํ•ด๋‹น๋œ๋‹ค.

4. ์‚ฌ์šฉ์ž๊ฐ€ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•œ ๊ฒฝ์šฐ (์›๋ž˜ ์žˆ๋˜ flexbox์˜ item)

Layout > Paint > Composite

๋‹จ, ๋ฏธ๋””์–ด์ฟผ๋ฆฌ ๋“ฑ resize๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” Style ๊ณผ์ •์ด ์ถ”๊ฐ€๋œ๋‹ค.

๊ฐ ๊ฒฝ์šฐ์— ์–ด๋–ค ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฑฐ์น˜๋Š”์ง€ ์˜ˆ์ธก ๋˜๋Š” ์ธก์ •ํ•˜๊ณ , ๊ฐœ๋ฐœ์˜๋„์— ๋”ฐ๋ผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๋ฉด์„œ๋„ ๋” ์ ์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ์˜๋„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

์ฐธ๊ณ ๊ฐ•์˜

Udacity: Browser Rendering Optimization by Google