Front-end/Browser

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • && ๊ฐ์ข… ์šฉ์–ด ์ •๋ฆฌ

ciocio 2021. 8. 22. 12:37

๐Ÿ“Œ  ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง?

 

1. [Parsing] HTML ํŒŒ์ผ๊ณผ CSS ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•ด์„œ ๊ฐ๊ฐ Tree ๋ฅผ ๋งŒ๋“ฆ.
2. [Style] ๋‘ Tree ๋ฅผ ๊ฒฐํ•ฉํ•ด์„œ ํ™”๋ฉด์— ํ‘œํ˜„๋˜๋Š” Node ๋ฅผ ๊ธฐ์ค€์œผ๋กœ Rendering Tree ๋ฅผ ๋งŒ๋“ฆ.
3. [Layout/Reflow] Rendering Tree ์—์„œ ๊ฐ Node ์˜ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐ. = ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐ.
4. [Paint/Repaint] ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์ด์šฉํ•ด ๊ฐ Node ๋ฅผ ํ™”๋ฉด ์ƒ์˜ ์‹ค์ œ pixel ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ Layer๋กœ ์ƒ์„ฑ.
5. [Composite] Layer ๋“ค์„ ํ•ฉ์„ฑํ•˜์—ฌ ์‹ค์ œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋ƒ„. 

 

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์šด์˜ ์ฒด์ œoperating system์ด๋‚˜ ๊ฐ€์ƒ ๋จธ์‹ virtual machine ์œ„์—์„œ ์‹คํ–‰๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ (ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ HTML, CSS์™€ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค.

์ฆ‰, ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ž๋ฐ”์ŠคํŠธ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํšจ์œจ์„ ๋†’์—ฌ์ค€๋‹ค.

 

 

๐Ÿ””        ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋™์ž‘ ๊ณผ์ •         01  02  03  04

 

 

01  ๋ธŒ๋ผ์šฐ์ €๋Š”  HTML,CSS,JS,์ด๋ฏธ์ง€,ํฐํŠธ ํŒŒ์ผ ๋“ฑ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.

 

 

02  ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๊ณ ,

      ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

 

๐Ÿ“ ๋ Œ๋”๋งrendering

 

HTML, CSS, JS๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ.

 

๐Ÿ“ ํŒŒ์‹ฑparsing

 

ํŒŒ์‹ฑ์€ ๊ตฌ๋ฌธ ๋ถ„์„syntax analysis๋ผ๊ณ ๋„ ํ•จ.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ฐ€๋“ ๋“  ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด

ํ…์ŠคํŠธ ๋ฌธ์„œ์˜ ๋ฌธ์ž์—ด์„ ํ† ํฐtoken์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  (์–ดํœ˜๋ถ„์„lexical analysis),

ํ† ํฐ์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ (ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ) ํŒŒ์Šค ํŠธ๋ฆฌparse tree/syntax analysis๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •.

 

 

๐Ÿ“Ž  HTML ํŒŒ์‹ฑ 

 

 

๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์— ์˜ํ•ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ HTML ๋ฌธ์„œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋‹ค.

์ด ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์ธ ํ”ฝ์…€๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด์•ผํ•œ๋‹ค.

 

 

01  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ํŒŒ์ผ์„ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•œ๋‹ค.

02  ์„œ๋ฒ„๋Š” ์š”์ฒญ๋œ HTML ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ ๋‹ค์Œ, ์ €์žฅ๋œ ๋ฐ”์ดํŠธ(2์ง„์ˆ˜)๋ฅผ ์ธํ„ฐ๋„ท์„ ๊ฒฝ์œ ํ•˜์—ฌ ์‘๋‹ตํ•œ๋‹ค.

03  ๋ธŒ๋ผ์šฐ์ €๋Š” HTML๋ฌธ์„œ๋ฅผ ๋ฐ”์ดํŠธ(2์ง„์ˆ˜) ํ˜•ํƒœ๋กœ ์‘๋‹ต๋ฐ›๋Š”๋‹ค. 

      ๋ฐ”์ดํŠธ ํ˜•ํƒœ์˜ HTML๋ฌธ์„œ๋Š” metaํƒœ๊ทธ์˜ charset ์†์„ฑ์— ์˜ํ•ด ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

      (์˜ˆ: UTF-8)

04  ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ HTML ๋ฌธ์„œ๋ฅผ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ, ํ† ํฐtoken๋“ค๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

05  ๊ฐ ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œnode๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค.

      ํ† ํฐ์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋ฌธ์„œ ๋…ธ๋“œ, ์š”์†Œ ๋…ธ๋“œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ, ํ…์ŠคํŠธ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

      ๋…ธ๋“œ๋Š” ์ดํ›„ DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ๋œ๋‹ค.

06  HTML๋ฌธ์„œ๋Š” HTML ์š”์†Œ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, HTML ์š”์†Œ๋Š” ์ค‘์ฒฉ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋‹ค.

      ์ด๋Ÿฌํ•œ HTML ์š”์†Œ๊ฐ„์˜ ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. 

      -->  DOM (Document Object Model)์ƒ์„ฑ

 

 

๐Ÿ“Ž  CSS ํŒŒ์‹ฑ 

 

 

๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•ด๋‚˜๊ฐ„๋‹ค.

์ƒ์„ฑํ•ด๋‚˜๊ฐ€๋‹ค๊ฐ€ CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” linkํƒœ๊ทธ๋‚˜ styleํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ์ค‘๋‹จํ•˜๊ณ  ์„œ๋ฒ„์— CSS ํŒŒ์ผ์„ ์š”์ฒญํ•œ๋‹ค.

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ CSS ํŒŒ์ผ์„ ๋ฐ›์•„์˜ค๋ฉด HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์ณ CSSOM (CSS Object Model) ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

( ๋ฐ”์ดํŠธ   -->  ๋ฌธ์ž  -->  ํ† ํฐ  -->  ๋…ธ๋“œ  -->  CSSOM )

CSS ํŒŒ์‹ฑ์„ ์™„๋ฃŒํ•˜๋ฉด HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์‹œ์ ๋ถ€ํ„ฐ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

CSSOM์€ CSS์˜ ์ƒ์†์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค. โญ์‹ ๊ธฐ์‹ ๊ธฐโญ

 

 

03  ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ JS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AST(Abstract Syntax Tree)๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,

      ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. 

      ์ด๋•Œ JS๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM์ด๋‚˜ CSSOM์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋” ํŠธ๋ฆฌ๋กœ

      ๊ฒฐํ•ฉ๋œ๋‹ค.

 

 

๐Ÿ“Ž ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ

 

 

DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌrender tree๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.

๋ Œ๋” ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š” ์š”์†Œ๋“ค (html์˜ metaํƒœ๊ทธ & scriptํƒœ๊ทธ, css์˜ display: none๋“ฑ)

์˜ ๋…ธ๋“œ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.  -->  ํ™”๋ฉด์— ์•ˆ๋‚˜์˜ค๋ฉด ๋ Œ๋”๋ง๋˜๋Š” ๋…ธ๋“œ์—์„œ ๋นผ๋ฒ„๋ฆผ ใ„ทใ„ท

 

 

๐Ÿ“Ž ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ

 

 

CSS ํŒŒ์‹ฑ ๊ณผ์ •๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” script ํƒœ๊ทธ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ˜ํ…์ธ ๋กœ ๋‹ด์€ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•œ๋‹ค.

๊ด€๋ จํ•œ script ํŒŒ์ผ ๋‚ด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ €์ˆ˜์ค€ ์–ธ์–ดlow-level language๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋ Œ๋”๋ง ์—”์ง„์ด HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๋“ฏ์ด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด์„œ AST(Abstract Syntax Tree ์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿ“ ํ† ํฌ๋‚˜์ด์ง•tokenizing

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ดํœ˜ ๋ถ„์„lexical analysis ํ•˜์—ฌ ํ† ํฐtoken(๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„)๋“ค๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

์ด ๊ณผ์ •์€ ๋ ‰์‹ฑlexing์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜์ง€๋งŒ ํ† ํฌ๋‚˜์ด์ง•๊ณผ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ“ ํŒŒ์‹ฑparsing

 

ํ† ํฐtoken๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ ๋ถ„์„syntatic analysis ํ•˜์—ฌ AST(์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

AST(Abstract Syntax Tree)๋Š” ํ† ํฐtoken์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.

AST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด TypeScript, Babel, Prettier ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌtranspiler๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๐Ÿ“ ๋ฐ”์ดํŠธ์ฝ”๋“œbitecode generator

 

ํŒŒ์‹ฑ์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ ์ƒ์„ฑ๋œ AST๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค.

 

 

 

04  ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— HTML ์š”์†Œ๋ฅผ ํŽ˜์ธํŒ…ํ•œ๋‹ค.

 

์™„์„ฑ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ๊ฐ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋งํ•˜๋Š” ํŽ˜์ธํŒ… ์ฒ˜๋ฆฌ์— ์ž…๋ ฅ๋œ๋‹ค.

 

 

 

๐Ÿ“Œ  ๋ธŒ๋ผ์šฐ์ € ๋ฆฌํ”Œ๋กœ์šฐreflow ๋ฆฌํŽ˜์ธํŠธrepaint

 

์ง€๊ธˆ๊นŒ์ง€ ์‚ดํŽด๋ณธ ๋ Œ๋”๋ง ๊ณผ์ •์€ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ฐ˜๋ณตํ•ด์„œ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ(๋ฆฌํ”Œ๋กœ์šฐ)๊ณผ ํŽ˜์ธํŒ…(๋ฆฌํŽ˜์ธํŠธ)์ด ์žฌ์ฐจ ์‹คํ–‰๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ณผ์ •์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ์„ฑ๋Šฅ์„ ์•…ํ™”์‹œํ‚จ๋‹ค.

๊ฐ€๊ธ‰์  ๋ฆฌ๋ Œ๋”๋ง์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

 

โ—พ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ ๋…ธ๋“œ ์ถ”๊ฐ€ / ์‚ญ์ œ

โ—พ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋ฆฌ์‚ฌ์ด์ง•์— ์˜ํ•œ ๋ทฐํฌํŠธviewport ํฌ๊ธฐ ๋ณ€๊ฒฝ

โ—พ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” css style ๋ณ€๊ฒฝ

 

๐Ÿ“ ๋ฆฌํ”Œ๋กœ์šฐreflow

 

๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ

 

๐Ÿ“ ๋ฆฌํŽ˜์ธํŠธrepaint

 

๋‹ค์‹œ ํŽ˜์ธํŠธ๋ฅผ ํ•˜๋Š” ๊ฒƒ

๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์€ ๋ฆฌํ”Œ๋กœ์šฐ ์—†์ด ๋ฆฌํŽ˜์ธํŠธ๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

 

 

๐Ÿ“Œ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ ์ค‘ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

 

๋ธŒ๋ผ์šฐ์ €๋Š” ๋™๊ธฐ์ synchronous์œผ๋กœ, ์ฆ‰ ์ˆœ์ฐจ์ ์œผ๋กœ HTML, CSS, JS๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

์ด๊ฒƒ์€ script ํƒœ๊ทธ์˜ ์œ„์น˜์— ๋”ฐ๋ผ HTML ํŒŒ์‹ฑ์ด ๋ธ”๋กœํ‚น๋˜์–ด DOM ์ƒ์„ฑ์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

script ๋‚ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ DOM API ์š”์†Œ๋“ค์ด DOM์„ ์กฐ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์™„์„ฑ๋œ ์ดํ›„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ฝ๊ฒŒ๋” ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด DOM์˜ ์š”์†Œ๋“ค์ด ์—†๊ฑฐ๋‚˜ ์ƒ์„ฑ ์ „์ด์–ด์„œ ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์— ์˜ํ•ด DOM ์ƒ์„ฑ์ด ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด

HTML5๋ถ€ํ„ฐ script ํƒœ๊ทธ์— async์™€ defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

async์™€ defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ž๋ฐ”์ŠคํŠธ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๋ถ€์—์„œ script ์•ˆ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ ใ…Žใ…Ž ์ด๋• ๊ทธ๋ƒฅ ์œ„์น˜ ์กฐ์ •ํ•ด์•ผ์ง€ ^^

 

 

 

 

๐Ÿ“ async ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

 

HTML ํŒŒ์‹ฑ๊ณผ ์™ธ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค.

๋‹จ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์งํ›„์— ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋•Œ๋Š” ์ž ๊น HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ script ํƒœ๊ทธ์— async ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ง€์ •ํ•˜๋ฉด โ— script ํƒœ๊ทธ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด โ—

๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ถ€ํ„ฐ ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

๐Ÿ“ defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

 

HTML ํŒŒ์‹ฑ๊ณผ ์™ธ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค.

๋‹จ, HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„์— (์ฆ‰ DOM ์ƒ์„ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„์—) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์ง„ํ–‰๋œ๋‹ค.

DOM ์ƒ์„ฑ์ด ์™„๋ฃŒ๋œ ์ดํ›„ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์œ ์šฉํ•˜๋‹ค.

 

 

 

 

 

• ์ฐธ๊ณ  ์ž๋ฃŒ

 

JavaScript Deep Dive -์ด์›…๋ชจ ์ €

https://d2.naver.com/helloworld/59361

๋ฐ˜์‘ํ˜•