๐ŸŒ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ์–ด๋–ป๊ฒŒ ์›น์‚ฌ์ดํŠธ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋‚˜์š”?

MISO :-)

๐ŸŒ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ์–ด๋–ป๊ฒŒ ์›น์‚ฌ์ดํŠธ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋‚˜์š”?

2023๋…„ 01์›” 24์ผ

11๋ถ„

0๋ช…์˜ ์‚ฌ๋žŒ์ด ์ฝ์–ด๋ดค์–ด์š”

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŽ˜์ด์ง€์˜ ์ดˆ๊ธฐ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋ฅผ Critical Rendering Path(CRP)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์ €ํฌ๋Š” ์˜ค๋Š˜ Chrome ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ด ๊ณผ์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • ๋ฏธ๋ฆฌ๋ณด๊ธฐ

์ถœ์ฒ˜: bit.ly/lifeofapixel 79์žฅ

์ถœ์ฒ˜: bit.ly/lifeofapixel 79์žฅ

์‚ฌ์ง„์— ์žˆ๋Š” Blink๋Š” ๋ญ”๊ฐ€์š”?

์ตœ๊ทผ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์›น ๋ Œ๋”๋ง ์—”์ง„์ž…๋‹ˆ๋‹ค!
๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด Blink๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒญ ๋‚ด์—์„œ ์ปจํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


Blink๋Š” ์•„๋ž˜ ์‚ฌํ•ญ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • DOM, CSS, Web IDL์„ ํฌํ•จํ•œ ์›น ํ”Œ๋žซํผ ์‚ฌ์–‘(ex: HTML standard)์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • V8 ์—”์ง„์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ JavaScript๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ์ด์šฉํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ€์ผ๊ณผ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  • Chrome Compositor๋ฅผ ๋‚ด์žฅํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

๋ Œ๋”๋ง ์—”์ง„์€ ํ‘œ์ค€์ด ์—†๊ธฐ์— ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์–ดํญ์Šค๋Š” ๋ชจ์งˆ๋ผ์—์„œ ์ง์ ‘ ๋งŒ๋“  ๊ฒŒ์ฝ”(Gecko)์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ , ์‚ฌํŒŒ๋ฆฌ์™€ ํฌ๋กฌ(28 ๋ฒ„์ „ ์ด์ „)์—์„œ๋Š” ์›นํ‚ท(Webkit)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ์˜ ํฌ๋กฌ(28 ๋ฒ„์ „ ์ดํ›„)์€ Webkit ์ง€์›์„ ์ค‘๋‹จํ•˜๊ณ  Webkit์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Blink๋ผ๋Š” ์ƒˆ๋กœ์šด ์›น ๋ Œ๋”๋ง ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://opentutorials.org/module/3800/22800

์ถœ์ฒ˜: https://opentutorials.org/module/3800/22800

0) ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ

ํ•ด๋‹น ๋ถ€๋ถ„์€ Chrome์˜ ๋‚ด๋ถ€ ๋™์ž‘ 2ํŽธ ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋‚ด์šฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ Chrome์˜ ๋‚ด๋ถ€ ๋™์ž‘ 1ํŽธ ๋‚ด์šฉ์„ ์ฝ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part2/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part2/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

0-1) ์ฃผ์†Œ์ฐฝ์— ๊ฐ’ ์ž…๋ ฅํ•˜๊ธฐ

์ €ํฌ๋Š” Chrome ์ฃผ์†Œ์ฐฝ์— ๊ฒ€์ƒ‰์–ด ํ˜น์€ URL์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— Chrome์€ ๊ฒ€์ƒ‰์–ด ์ผ ๋•Œ์™€ URL์ผ ๋•Œ๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค์˜ UI ์Šค๋ ˆ๋“œ๊ฐ€ ์ž…๋ ฅ๋˜๋Š” ๋‚ด์šฉ์ด ๊ฒ€์ƒ‰์–ด์ธ์ง€ URL์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.


๋งŒ์•ฝ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๊ฒ€์ƒ‰ ์—”์ง„์˜ URL๊ณผ ์กฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด URL ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (prepopulated_engines.json ํŒŒ์ผ ์ฐธ๊ณ )

0-2) ๋‚ด๋น„๊ฒŒ์ด์…˜ ์‹œ์ž‘ํ•˜๊ธฐ

์‚ฌ์šฉ์ž๊ฐ€ Enterํ‚ค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‚ฌ์ดํŠธ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด UI ์Šค๋ ˆ๋“œ๊ฐ€ ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.


๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๊ฐ€ ํƒญ์˜ ์™ผ์ชฝ์— ํ‘œ์‹œ๋˜๊ณ  ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋Š” DNS lookup๊ณผ TLS ์—ฐ๊ฒฐ ์„ค์ •๊ณผ ๊ฐ™์€ ์ ์ ˆํ•œ ํ”„๋กœํ† ์ฝœ์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

0-3) ์‘๋‹ต ์ฝ๊ธฐ

์‘๋‹ต์œผ๋กœ header์™€ payload๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ payload ์ŠคํŠธ๋ฆผ์˜ ์ฒ˜์Œ ๋ช‡ ๋ฐ”์ดํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.


ํ•ด๋‹น ๋‹จ๊ณ„์—์„  ์•„๋ž˜ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • header์˜ Content-Type๊ณผ ์‹ค์ œ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ์— MIME ์Šค๋‹ˆํ•‘์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ํ˜•์‹์„ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.
  • ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด๋ผ๋ฉด ๋‹ค์šด๋กœ๋“œ ๋งค๋‹ˆ์ €์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Safe Browsing ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„๋ฉ”์ธ๊ณผ ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ์•…์„ฑ ์‚ฌ์ดํŠธ๋กœ ์•Œ๋ ค์ง„ ์‚ฌ์ดํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋Š” ๊ฒฝ๊ณ  ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋ผ๊ณ  ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  • cross-site ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ „๋‹ฌ๋˜์ง€ ์•Š๋„๋ก CORB(Cross-Origin Read Blocking) ๊ฒ€์‚ฌ๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

0-4) ์‹คํ–‰ํ•  ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ฐพ๊ธฐ

๋ชจ๋“  ๊ฒ€์‚ฌ๊ฐ€ ๋๋‚˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ๋œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ™•์‹ ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋Š” UI ์Šค๋ ˆ๋“œ์—๊ฒŒ ์ค€๋น„๋˜์—ˆ๋‹ค๊ณ  ์•Œ๋ฆฝ๋‹ˆ๋‹ค.


๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์ˆ˜๋ฐฑ ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๊ธฐ์— ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


0-2๋‹จ๊ณ„์—์„œ UI ์Šค๋ ˆ๋“œ๊ฐ€ ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๋กœ URL ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ UI ์Šค๋ ˆ๋“œ๋Š” ์ด๋ฏธ ์–ด๋Š ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•  ์ง€ ์•Œ๊ณ  ์žˆ๊ธฐ์— UI ์Šค๋ ˆ๋“œ๋Š” ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฐพ๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ ๋™์‹œ์— ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋ ค ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.


๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋ฉด ๋„คํŠธ์›Œํฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์ด๋ฏธ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋Š” ์ค€๋น„ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค.

0-5) ๋‚ด๋น„๊ฒŒ์ด์…˜ ์‹คํ–‰ํ•˜๊ธฐ

๋ฐ์ดํ„ฐ์™€ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค ๋ชจ๋‘ ์ค€๋น„๊ฐ€ ๋์œผ๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค์—์„œ ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ IPC ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.


๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ HTML ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‚ด๋น„๊ฒŒ์ด์…˜์ด ์‹คํ–‰๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ™•์ธํ•˜๊ณ  ๋‚˜๋ฉด ๋‚ด๋น„๊ฒŒ์ด์…˜์ด ์™„๋ฃŒ๋˜๊ณ  ๋ฌธ์„œ ๋กœ๋”ฉ ๋‹จ๊ณ„๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

images/chrome-process.gif

์ด๋•Œ ์ฃผ์†Œ ํ‘œ์‹œ์ค„์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋ณด์•ˆ ํ‘œ์‹œ ๋ฐ ์‚ฌ์ดํŠธ ์„ค์ • UI์— ์ƒˆ ํŽ˜์ด์ง€ ์‚ฌ์ดํŠธ ์ •๋ณด๊ฐ€ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.


ํƒญ์˜ ์„ธ์…˜ ๊ธฐ๋ก์ด ์—…๋ฐ์ดํŠธ๋˜์–ด ์ด์ „ / ๋‹ค์Œ ๋ฒ„ํŠผ์œผ๋กœ ๋ฐฉ๊ธˆ ํƒ์ƒ‰ํ•œ ์‚ฌ์ดํŠธ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํƒญ์ด๋‚˜ ์ฐฝ์„ ๋‹ซ์„ ๋•Œ ํƒญ / ์„ธ์…˜ ๋ณต์›์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ๊ธฐ๋ก์ด ๋””์Šคํฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

1) ๋ฌธ์„œ ๋กœ๋”ฉํ•˜๊ธฐ

ํ•ด๋‹น ๋ถ€๋ถ„์€ Chrome์˜ ๋‚ด๋ถ€ ๋™์ž‘ 3ํŽธ ์˜ ๋‚ด์šฉ๊ณผ ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํ•„์š”ํ•œ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ชจ๋“  ๊ฒƒ ์˜์ƒ ์ž๋ฃŒ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

์ง€๊ธˆ๋ถ€ํ„ฐ ์„ค๋ช…ํ•  ๊ณผ์ •์€ Renderer Process์˜ Main Thread ์•ˆ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

1-1) DOM ํŠธ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ

HTML ํŒŒ์ผ์„ ๋ฐ›๋”๋ผ๋„ ์ปดํ“จํ„ฐ๊ฐ€ HTML ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ์ธ์‹ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ํŒŒ์‹ฑ์„ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

DOM ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด <h1> ํƒœ๊ทธ์˜ ํ…์ŠคํŠธ๋ฅผ Hello์—์„œ Hi๋กœ ๋ฐ”๊ฟ€ ๋•Œ ํ•ด๋‹น Node๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ธฐ์— ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOM ๋ชจ๋ธ์€ Document๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋ธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

ํ•ด๋‹น ํŠธ๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์„ ์ž์„ธํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HTML์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ์œ„ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ DOM ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


HTML ํŒŒ์„œ์˜ ์ฒซ ๋ฒˆ์งธ ํŠน์ง•์€ ์˜ค๋ฅ˜์— ๋„ˆ๊ทธ๋Ÿฌ์šด ์†์„ฑ์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํŠน์ง•์€ ํŒŒ์‹ฑ ๊ณผ์ •์ด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


HTML ํŒŒ์‹ฑ ๋„์ค‘ <script> , <link> ๊ฐ™์€ ์™ธ๋ถ€์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด HTML ํŒŒ์‹ฑ์„ ์ฆ‰์‹œ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋จผ์ € ๋ฐ›์•„์˜จ ์ฝ”๋“œ๋ถ€ํ„ฐ ํ•ด์„์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” HTML๊ณผ ๋‹ฌ๋ฆฌ ์™ธ๋ถ€ ์ฝ˜ํ…์ธ ๋“ค์€ ์ฆ๋ถ„์ ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๋˜, <script> ์— DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ„๋„ ์˜ต์…˜์ธ async ์™€ defer ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ํŠน์ง•์€ ์žฌ์ง„์ž…์„ฑ(Reentrant) ์ž…๋‹ˆ๋‹ค.


์œ„์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ HTML ํŒŒ์‹ฑ ๊ณผ์ •์€ ์–ด๋– ํ•œ ์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ฐฉํ•ด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์— HTML์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  HTML์ด ๋งŽ์„ ๋•Œ๋Š” ํŒŒ์‹ฑ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1-2) CSSOM ํŠธ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ

HTML์€ ๋‹จ์ˆœํ•œ ๋ฌธ์„œ์ด๊ธฐ์— ๋ Œ๋”๋ง ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  CSS๊ฐ€ ๋ Œ๋”๋ง ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


CSS๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์€ DevTool์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

CSSOM๋„ Cascade๊ฐ™์€ ์ƒ์† ๊ฐœ๋…์„ ์ ์šฉํ•˜๊ธฐ ์šฉ์ดํ•˜๋„๋ก ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

CSSOM๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JS API๊ฐ€ ์žˆ์œผ๋ฉฐ JavaScript๋กœ CSS๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1-3) JavaScript ์ฒ˜๋ฆฌํ•˜๊ธฐ

JavaScript๋Š” HTML ํŒŒ์‹ฑ, User Input, requestAnimationFrame(), DOM Timer ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์›นํ‚ท ๊ณ„์—ด(iOS, ์‚ฌํŒŒ๋ฆฌ)์˜ ๊ฒฝ์šฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์กด์žฌํ•˜์—ฌ JS๋ฅผ ํŒŒ์‹ฑํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


V8 ์—”์ง„์˜ ๊ฒฝ์šฐ JS๋ฅผ ๋ฐ›์œผ๋ฉด JIT ์ปดํŒŒ์ผ ๊ณผ์ •์„ ํ†ตํ•ด ๋จธ์‹  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
JIT ์ปดํŒŒ์ผ ๊ณผ์ •์€ ์†๋„๋Š” ๊ต‰์žฅํžˆ ๋น ๋ฅด์ง€๋งŒ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์žก์•„๋จน์Šต๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ V8๋„ ์›นํ‚ท ๊ณ„์—ด์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์žฅ์ ์„ ๋ฐ›์•„๋“ค์—ฌ 2017๋…„์— Ignition์ด๋ผ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๋„์ž…ํ•˜์˜€๊ณ , JS ์ฝ”๋“œ๋ฅผ ๋ฐ›์œผ๋ฉด ๋จผ์ € ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด JIT ์ปดํŒŒ์ผ์„ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

1-4) Render Tree ์ƒ์„ฑํ•˜๊ธฐ

DOM Tree์™€ CSSOM Tree ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ Render Tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Render Tree๋Š” ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.


DOM Tree์™€ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ Render Tree๋Š” HTML ํŒŒ์ผ๊ณผ 1:1 ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ์ด๊ธฐ์— ํ™”๋ฉด์— ๋ณด์ด๋Š” ์š”์†Œ๋“ค์„ ์œ„์ฃผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์ฆ‰, ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ์š”์†Œ๋Š” Render Tree์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์˜ˆ๋ฅผ ๋“ค์–ด Head์— ๋“ค์–ด๊ฐ€๋Š” <title> ์€ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ํ•„์š”๊ฐ€ ์—†๊ธฐ์— Render Tree์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291/

์œ„ ๊ทธ๋ฆผ์€ DOM๊ณผ CSSOM์„ ํ•ฉ์ณ Render Tree๋ฅผ ๋งŒ๋“œ๋Š” ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.


๊ทธ๋ฆผ์— โ€˜web performanceโ€™ ๋ผ๋Š” span ํƒœ๊ทธ๊ฐ€ Render Tree์— ๊ทธ๋ ค์ง€์ง€ ์•Š์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
display: none์ด๋ผ๋Š” CSS๋Š” ํ™”๋ฉด์— ๋ณด์ผ ํ•„์š”๊ฐ€ ์—†๊ธฐ์— ๊ทธ๋ ค์ง€์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1-5) Layout

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„์€ CSS 2.1 ์ŠคํŽ™์„ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ๋‚ด CSS์˜ ํ‘œ์ค€์— ๋งž์ถฐ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— ๋ธŒ๋ผ์šฐ์ € ์„ธ๊ณ„์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ•์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฌํ•œ ๋ฐ•์Šค์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ด ๋ฐ”๋กœ Layout์ž…๋‹ˆ๋‹ค.
๋ ˆ์ด์•„์›ƒ์—๋Š” ์ „์ฒด(Global), ๋ถ€๋ถ„(Incremental) ๋ ˆ์ด์•„์›ƒ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


Untitled

๊ทธ๋ฆผ์˜ ๊ด„ํ˜ธ๋Š” viewport ๊ธฐ์ค€ (๊ฐ€๋กœ ์œ„์น˜, ์„ธ๋กœ ์œ„์น˜, width, height) ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฐ•์Šค ๋ชจ๋ธ์˜ width๋Š” ๋ถ€๋ชจ ํฌ๊ธฐ์˜ width๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ๊ทธ๋ฆผ์—์„œ ์ตœ์ƒ์œ„ ์š”์†Œ๋Š” 1024๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ Global ๋ ˆ์ด์•„์›ƒ์€ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋ ˆ์ด์•„์›ƒํ•˜๊ณ ,
Incremental ๋ ˆ์ด์•„์›ƒ์€ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


Global ๋ ˆ์ด์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์€ ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํฐํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Untitled

๋˜ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฐ•์Šค๋“ค์€ block, inline ํ˜•ํƒœ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
block์˜ ๊ฒฝ์šฐ์—” ํ•œ ์ค„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉฐ(์•„๋ž˜-์œ„) inline์€ ์ขŒ์šฐ๋กœ(์˜†) ์Œ“์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์š”์†Œ๋“ค์ด ์–ด๋–ค ๋ฐ•์Šค ํƒ€์ž…์ธ์ง€๋Š” ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— ๋ธŒ๋ผ์šฐ์ €๋Š” element์˜ ๋ฐ•์Šค ํƒ€์ž…์„ ๋ณด๊ณ  ๋ ˆ์ด์•„์›ƒ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

๊ฒฐ๊ตญ ์ด ๊ณผ์ •์—์„  ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

1-6) Paint

Untitled

๋ธŒ๋ผ์šฐ์ €์˜ ํŽ˜์ธํŠธ ๊ณผ์ •์€ ํ”„๋ฆฐํŠธํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.


ํ•œ ๋ฒˆ์— ํ™• ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”„๋ฆฐํ„ฐ์ฒ˜๋Ÿผ ์ฒœ์ฒœํžˆ ํ•œ ํ”ฝ์…€์”ฉ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.
์ฆ‰, ํŽ˜์ธํŠธ๋ฅผํ•˜๊ธฐ ์œ„ํ•ด์„  Render Tree๋ฅผ ํ•˜๋‚˜์”ฉ ๊ทธ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ด ๊ณผ์ •์—์„  ์œ„ ๊ณผ์ •๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ Tree๊ฐ€ ์•„๋‹ˆ๋ผ Records, ์ฆ‰ ์ˆœ์„œ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„  ์•„๋ž˜์—์„œ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ๋œ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”Œ๋กœ์šฐ

Untitled

์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„  ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ๋ Œ๋”๋ง ๋ฐฉ์‹์—์„  ๋กœ๋”ฉ์ด ์ค‘์‹ฌ์ด์—ˆ์œผ๋‚˜ ์ด์ œ๋Š” ๋กœ๋”ฉ ์ดํ›„์˜ ๊ณผ์ •์ด ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์„œ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅํ•œ Update Layer Tree์™€ Composite์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1-7) ์—ฌ๋Ÿฌ Layer๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ

ํฌํ† ์ƒต์ด๋‚˜ Figma ๊ฐ™์€ ํŽธ์ง‘ ํˆด์„ ์‚ฌ์šฉํ•ด๋ณด์…จ๋‹ค๋ฉด Layer ๋ผ๋Š” ๊ฐœ๋…์— ์ต์ˆ™ํ•˜์‹ค ๊ฒ๋‹ˆ๋‹ค.


๋ธŒ๋ผ์šฐ์ €์˜ ๋ ˆ์ด์–ด๋„ ํก์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ๋  ์š”์†Œ๋“ค์„ ์ธต ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ„์–ด ๋‘” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  Update Layer Tree๋Š” ๋ Œ๋”๋ง์ด ๋  ์ตœ์ข… ๋ ˆ์ด์–ด๋“ค์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์—์„œ๋„ Layer Tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Untitled

Layer๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์กฐ๊ฑด์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
8๋ฒˆ์„ ์ž์„ธํžˆ ๋ณด์‹œ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ƒ์„ฑ ์กฐ๊ฑด ์™ธ์—๋„ ์ž์ฒด์ ์œผ๋กœ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

1-8) Raster

Raster Thread๋Š” Recordํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ๊ฐ์˜ ํƒ€์ผ๋“ค์„ ๋น„ํŠธ๋งต์œผ๋กœ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://ko.m.wikipedia.org/wiki/๋ž˜์Šคํ„ฐํ™”

์ถœ์ฒ˜: https://ko.m.wikipedia.org/wiki/๋ž˜์Šคํ„ฐํ™”

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

DisplayItem(๋ Œ๋” ํŠธ๋ฆฌ, ๋ ˆ์ด์–ด ํŠธ๋ฆฌ)์„ ๋ฐ”ํƒ•์œผ๋กœ bitmap์„ ๋งŒ๋“œ๋Š” ์ผ์„ rasterization์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด rasterization์€ ์ผ๋ฐ˜์ ์œผ๋กœ GPU ์•ˆ์—์„œ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.


chrome://gpu/ ์— ์ ‘์†ํ•˜์—ฌ Rasterization ๊ฐ’์œผ๋กœ GPU ๊ฐ€์†์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ด๋ ‡๊ฒŒ rasterization ๋˜๊ณ  ๋‚œ ๋’ค screen์— pixel๋กœ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…๋„ GPU์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


์ด ๋•Œ SKIA์™€ OpenGL์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ SKIA ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜๋ฉด OpenGL API๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, SKIA๋Š” ๋” ๊ณ ์ˆ˜์ค€์˜ API์ž…๋‹ˆ๋‹ค.

2) ํ™”๋ฉด์„ ๊ทธ๋ฆฐ ์ดํ›„ ์ผ์–ด๋‚˜๋Š” ๋ณ€ํ™”์— ๋Œ€์‘ํ•˜๊ธฐ

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

์ €ํฌ๋Š” ์ด์ œ ํ™”๋ฉด์„ ๋ชจ๋‘ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.


์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กค์„ ํ•˜๊ฑฐ๋‚˜, zoom-in/out์„ ํ•˜๊ฑฐ๋‚˜ JavaScript๋กœ style์„ ๋™์ ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ์š”?


์ตœ๊ทผ ๋Œ€๋ถ€๋ถ„์˜ ํ™”๋ฉด์€ 60fps, ์ฆ‰ 1์ดˆ์— 60๋ฒˆ์˜ ํ™”๋ฉด์ด ์ƒˆ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, 16.67ms ์•ˆ์— ์œ„์— ์„ค๋ช…ํ•œ ๊ณผ์ •์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹คโ€ฆ!

2-1) Invalidation

๋ Œ๋”๋ง์ด ๋น ๋ฅด๊ฒŒ ๋˜๋„๋ก ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๋ณ€ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

DOM ๋…ธ๋“œ์˜ style ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค๋ฉด ๋‹ค์Œ ํ”„๋ ˆ์ž„ ๋•Œ computedStyle(CSSOM)์„ ๋‹ค์‹œ ๊ตฌํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ์— ํ‘œ์‹œํ•ด๋‘ก๋‹ˆ๋‹ค. (SetNeedsStyleRecalc() ํ˜ธ์ถœ)


layout์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค๋ฉด SetNeedsLayout๋งŒ ํ˜ธ์ถœํ•˜์—ฌ ์ด์ „ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.


์ด๋ ‡๊ฒŒ ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ์ƒˆ๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ invalidation์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Repaint

์Šคํฌ๋กค๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋„ˆ๋ฌด ๋งŽ์ด ๋ณ€ํ™”๋˜๊ธฐ์— ์œ„์˜ Invalidation ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ํฐ ํšจ๊ณผ๋ฅผ ๋ณด๊ธฐ๊ฐ€ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

๋งค ์Šคํฌ๋กค๋งˆ๋‹ค Repaint์™€ Rasterization์ด ๊ณ„์† ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

Jank

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์œ„์˜ ์‚ฌ๋ก€ ์™ธ์—๋„ JavaScript๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ธฐ์— ์ฝ”๋“œ ์‹คํ–‰์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ(jank)์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2-2) Composite

๊ทธ๋ ‡๊ธฐ์— invalidation ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ๋Šฅ๋„ ์žˆ์ง€๋งŒ scroll๋กœ ์ธํ•œ repaint, rasterization & JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์–ด rendering์ด ๋Šฆ์–ด์ง€๋Š” ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Compositing์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

Composite์€ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋“ค์„ ํ•ฉ์„ฑํ•˜์—ฌ ํ•œ ์žฅ์˜ ๋น„ํŠธ๋งต์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์›น์€ ๋‹จํŽธ์ ์œผ๋กœ ๋ณด์ด๊ธฐ์— ํ•˜๋‚˜์˜ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋ณ„๋กœ ๊ทธ๋ฆฐ ํ›„์— Composite ๊ณผ์ •์—์„œ ํ•ฉ์„ฑ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.



์ด ๊ธฐ๋ฒ•์„ Tiled Backing Store ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์ด ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ํ™”๋ฉด์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์˜์ƒ์—์„  ๋ฐฐ๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์บ๋ฆญํ„ฐ๋งŒ ๋ฐ”๊พธ๋ฉฐ ๋‹ค์Œ ์žฅ๋ฉด์„ ์—ฐ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™”๋ฉด์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Untitled

๋งŒ์•ฝ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ ˆ์ด์–ด๋ง ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•œ ์žฅ์œผ๋กœ ๋ Œ๋”๋ง์„ ํ•œ๋‹ค๋ฉด ์™ผ์ชฝ ์‚ฌ์ง„์˜ ๋‚˜๋ญ‡์žŽ์ด ๋–จ์–ด์ง€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค cost๊ฐ€ ํฐ paint ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

192159828-c3a30b98-63fb-4a77-9519-c6ff9087ec78.gif

์ด๋ ‡๊ฒŒ ๋ ˆ์ด์–ด๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ rasterizing ํ•œ ํ›„ ์ƒ์„ฑ๋œ bitmap๋งŒ ๋ณ€ํ˜•ํ•˜๋ฉด ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ์— ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ถœ์ฒ˜: https://developer.chrome.com/blog/inside-browser-part3/

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด ์ปดํฌ์ง€ํ„ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ๊ธด ์ดํ›„๋กœ๋Š” ๋ ˆ์ด์–ด ํŠธ๋ฆฌ์™€ ํŽ˜์ธํŠธ ์ˆœ์„œ๊ฐ€ ๋‹ด๊ธด ํŽ˜์ธํŠธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ปดํฌ์ง€ํ„ฐ ์Šค๋ ˆ๋“œ์—๊ฒŒ ๋„˜๊ธฐ๋ฉด ์ปดํฌ์ง€ํ„ฐ ์Šค๋ ˆ๋“œ๋Š” ๊ฐ ๋ ˆ์ด์–ด๋ฅผ ํƒ€์ผ ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ ์„œ Raster Thread์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

Threaded input

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ”์  ๋•Œ ์ปดํฌ์ง€ํ„ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค ์ž…๋ ฅ์„ ๋ฐ›์•„ bitmap์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ ˆ์ด์–ด๊ฐ€ ์•„๋‹Œ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋กค๋งํ•˜๋ฉด ์ปดํฌ์ง€ํ„ฐ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ์ผ์„ ๋„˜๊น๋‹ˆ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” render pipeline์„ ๊ฑฐ์ณ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์ถ”๊ฐ€๋กœ JavaScript์—์„œ scroll event listener๋ฅผ ๊ฑธ์–ด๋†“์€ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ main thread์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก task queue์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

[์ตœ์ข…,์ง„์งœ_๋งˆ์ง€๋ง‰] ์ •๋ฆฌ

์ฒ˜์Œ ์ฒจ๋ถ€ํ–ˆ๋˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ๋‹ค์‹œ ์ˆœ์„œ๋ฅผ ๋‚˜์—ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

์ถœ์ฒ˜: https://www.slideshare.net/deview/125-119068291

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ web content๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. DOM Tree๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. style์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค(resolve styles).
  4. layout์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  5. layer๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  6. property tree๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  7. layer๋ฅผ paintํ•ฉ๋‹ˆ๋‹ค.
  8. layer + DisplayItemList(paint operations) + property tree๋ฅผ compositor thread๋กœ commit(๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ)ํ•ฉ๋‹ˆ๋‹ค.
  9. layer๋ฅผ ์—ฌ๋Ÿฌ ์ž‘์€ ์กฐ๊ฐ(tile)๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
  10. SKIA library๋ฅผ ์‚ฌ์šฉํ•ด tile์„ rasterizing ํ•ฉ๋‹ˆ๋‹ค.
  11. DrawQuads๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  12. Skia์™€ OpenGL๋ฅผ ํ†ตํ•ด DrawQuads๋ฅผ ์‹ค์ œ ์Šคํฌ๋ฆฐ์— ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. (pixelํ™”)

๊ณผ์ •์„ ํ†ตํ•ด ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ดํ•ดํ•˜๊ธฐ

์ €ํฌ๋Š” ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์™œ ์•Œ์•„์•ผ ํ• ๊นŒ์š”?


๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋“  ์ƒ๊ฐ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Œ์•„๊ฐ€๊ธฐ์— ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋” ๋ช…ํ™•ํžˆ ์•Œ๋ฉด ์„ฑ๋Šฅ์„ ๊ณ ๋ฏผํ•  ๋•Œ ๋” ๋น ๋ฅด๊ฒŒ ๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Untitled

์–ด๋–ค ๋™์ž‘์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋””๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•„๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์„ ์ˆ˜์ •ํ•˜๋ฉด ์ˆ˜์ •ํ• ์ˆ˜๋ก ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์–ด๋–ค ์š”์†Œ๊ฐ€ ์–ด๋–ค ํŒŒ์ดํ”„๋ผ์ธ์„ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด CSS Triggers๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”!

Layout ์ตœ์ ํ™”ํ•˜๊ธฐ

Untitled

Layout์ด ํšจ์œจ์ ์ด๊ธฐ ์œ„ํ•ด์„  element์˜ ๊ฐœ์ˆ˜๋Š” 1,000๊ฐœ ์ •๋„๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜, ๋ถˆํ•„์š”ํ•œ Layout cost๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ฒ˜๋ฆฌํ•  ๋•Œ transform ์ด๋‚˜ web animations ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Paint ์ตœ์ ํ™”ํ•˜๊ธฐ

Untitled

Paint ๊ณผ์ •์—์„œ GPU Rasterization์„ ์‚ฌ์šฉํ•˜๋ฉด ๋•Œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ 10๋ฐฐ ์ •๋„ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด๊ฑธ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  meta name์— viewport๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์›จ์ผ, ์˜คํŽ˜๋ผ, ํฌ๋กฌ์—์„  ์ฝ˜ํ…์ธ ๋ฅผ GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Composite ์ตœ์ ํ™”ํ•˜๊ธฐ

Untitled

ํ•ด๋‹น ๊ณผ์ •์—์„  ๋ ˆ์ด์–ด๋“ค์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ž‘์ • ๋น ๋ฅด๋‹ค๊ณ  Layer๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹จ 30๊ฐœ ์ •๋„์˜ Layer๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ