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

[Web] Critical Rendering Path

by codnjs779 2021. 12. 14.

๐Ÿ”ท DOM + CSSOM

 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•˜๋ ค๋ฉด DOM๊ณผ CSSOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์„ฑ๋Šฅ์ด ์ข‹์€ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ HTML, CSS๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ œ๊ณตํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€ํ™˜๋˜๋Š”๋ฐ, HTML -> DOM // CSS -> CSSOM์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. 

 

HTML๋กœ ๋งˆํฌ์—…๋œ ์ฝ”๋“œ๊ฐ€ DOM์œผ๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๊นŒ์ง€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. 

 <!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link href="style.css" rel="stylesheet">
    <title>Critical Path</title>
  </head>
  <body>
    <p>Hello <span>web performance</span> students!</p>
    <div><img src="awesome-photo.jpg"></div>
  </body>
</html>

 

 

1. Bytes 

 ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์˜ ์›์‹œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด์™€์„œ ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ์— ๋”ฐ๋ผ ๊ฐœ๋ณ„ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

2. ํ† ํฐํ™”

 ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฌธ์ž์—ด์„ ์›น ํ‘œ์ค€์— ์ง€์ •๋œ ๊ณ ์œ  ํ† ํฐ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

3. ๋ ‰์‹ฑ

 ํ† ํฐ์€ ํ•ด๋‹น ์†์„ฑ ๋ฐ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋จ.

 

4. DOM TREE ์ƒ์„ฑ

๋งˆํฌ์—…์— ์ •์˜๋œ ์ƒ-ํ•˜ ๊ด€๊ณ„๋ฅผ ๊ตฌ์กฐํ™”ํ•œ ๋” ํŠธ๋ฆฌ๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค. ๋” ํŠธ๋ฆฌ์— ์ตœ์ข…์œผ๋กœ ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

 

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ CSSOM์„ ํ˜•์„ฑํ•˜๋Š”๋ฐ๋„ ๋˜‘๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค. CSS๋Š” ํ•˜ํ–ฅ์‹ ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค. ์ƒ์œ„ ์š”์†Œ์— ์Šคํƒ€์ผ์„ ์ค˜๋„ ํ•˜์œ„ ์š”์†Œ์—์„œ ๋” ์„ธ๋ถ„ํ™”๋œ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๋ฉด ์ƒ์œ„ ์Šคํƒ€์ผ ์†์„ฑ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

๐Ÿ”ท Render - Tree

 DOM๊ณผ CSSOM์ด ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค. 

 

๋ Œ๋” ํŠธ๋ฆฌ๊ฐ€ ํ˜•์„ฑ๋˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋™์ž‘์ด ์—ฐ์ด์–ด ์ผ์–ด๋‚˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ค€๋‹ค. 

๋ Œ๋”ํŠธ๋ฆฌ๊ฐ€ ์™„์„ฑ๋˜๋ฉด, layout ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰๋˜๋Š”๋ฐ, ๊ธฐ๊ธฐ์˜ ๋ทฐํฌํŠธ ๋‚ด์—์„œ ๋…ธ๋“œ์˜ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์บก์ฒ˜ํ•˜๋Š” '์ƒ์ž ๋ชจ๋ธ'์ด ์ƒ์„ฑ๋œ๋‹ค.  ๋ชจ๋“  ์ƒ๋Œ€์ ์ธ ์ธก์ •๊ฐ’์€ ํ™”๋ฉด์—์„œ ์ ˆ๋Œ€์ ์ธ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฐฐ์น˜๋œ๋‹ค. 

 

๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๋ Œ๋”๋ง ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ™”๋ฉด์˜ ์‹ค์ œ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” paint ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.

 

DOM ๋˜๋Š” CSSOM์ด ์ˆ˜์ •๋˜๋ฉด, ํ™”๋ฉด์— ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ํ”ฝ์…€์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ„๋‹จํ•œ ์›นํŽ˜์ด์ง€์ผ ๊ฒฝ์šฐ ํฌ๊ฒŒ ์ƒ๊ด€์ด ์—†์„ ์ˆ˜ ๋„ ์žˆ์ง€๋งŒ, ๋™์ ์š”์†Œ๊ฐ€ ๋งŽ์ด ๋“ค์–ด๊ฐ„ ์›น์ด๋‚˜ ๋งค์šฐ ๊ธด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ ํ•˜๋Š” ์›นํŽ˜์ด์ง€์—์„œ ์ˆ˜์ •๋  ๋•Œ๋งˆ๋‹ค layout -> paint -> composition์ด ์ผ์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์œ„ํ—˜์— ์ฒ˜ํ•œ๋‹ค. 

 

๊ทธ๋ž˜์„œ js์—์„œ css์ˆ˜์ •์„ ์œ„ํ•ด ๋™์ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์ธ css ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. 

https://csstriggers.com/

 

CSS Triggers

@PROPERTY_DESCRIPTION@ B G W E Change from default B G W E Subsequent updates

csstriggers.com

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

 

 

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ) https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction

 

๋ Œ๋”๋ง ํŠธ๋ฆฌ ์ƒ์„ฑ, ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ  |  Web  |  Google Developers

TODO

developers.google.com