์น ํ์ด์ง๊ฐ ํ๋ฉด์ ๋ณด์ด๊ธฐ๊น์ง ๋ธ๋ผ์ฐ์ ๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ,
์ด ๊ณผ์ ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ(Rendering Pipeline)์ด๋ผ๊ณ ํ๋ค.
๐ ํ์ฑ(Parsing)์ด๋?
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ํด ์์๋ณด๊ธฐ ์ ์
๋จผ์ ํ์ฑ์ด๋ผ๋ ๊ฐ๋ ์ ๋ํด ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.
ํ์ฑ(Parsing)์ ํ ์คํธ ํํ์ ๋ฐ์ดํฐ๋ฅผ
๋ฌธ๋ฒ์ ์ผ๋ก ๋ถ์ํ์ฌ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋งํ๋ค.
๋ธ๋ผ์ฐ์ ๋ HTML ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์
์ด๋ฅผ ํด์ํ ๋ค์ DOM ํธ๋ฆฌ๋ผ๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ก ๋ง๋ค๊ฒ ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ HTML ํ์ฑ์ด๋ผ๊ณ ํ๋ค.
1๏ธโฃ HTML ํ์ฑ → DOM ํธ๋ฆฌ ์์ฑ
์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ด๋ค ์ฌ์ดํธ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ์ ๋
์๋ฒ๊ฐ ๊ทธ ์ฃผ์์ ํด๋นํ๋ HTML ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ๊ฒ ๋๋ค.
์ด๋ ๋ธ๋ผ์ฐ์ ๋ HTML ํ์ผ์ ๋ฐ์ดํธ ์คํธ๋ฆผ(8๋นํธ ๋จ์ ๋ฐ์ดํฐ) ํํ๋ก ์ ๋ฌ๋ฐ์์
์ด๋ฅผ ๋ฌธ์ ํํ๋ก ๋ณํํ๊ณ ํ ํฐํ(Tokenization) ๊ณผ์ ์ ์ํํ๊ฒ ๋๋ค.
๐ก ์ฐธ๊ณ )
๋ธ๋ผ์ฐ์ ์์ฒด์์ ๋ฐ์ดํธ ์คํธ๋ฆผ ํํ๋ก ์ต์ ํํด์ ๊ฐ์ ธ์ด (HTTP ํ๋กํ ์ฝ์ ์ํด)
์ค์ ๋ก ๊ฐ๋ฐ์๋ ๋ฒ๋ค๋ง/ํธ๋์คํ์ผ๋ง ๊ณผ์ ์ ๊ฑฐ์ณ ์ฒญํฌ ํํ๋ก ์๋ฒ์ HTML, CSS, JS๋ฅผ ์ ๋ก๋ํจ
- ํ ํฐ: ๋ฐ์ดํธ ์คํธ๋ฆผ์ด HTML ์ฝ๋์ธ์ง ํ์ธํ๋ ์ผ์ข ์ ์ค๋ช ์ ๊ฐ์ ์กด์ฌ
- ํ ํฐํ: HTML ํ๊ทธ๋ ์์ฑ ๋ฑ์ ๊ตฌ๋ถํด ๋๊ฐ๋ ๊ณผ์
ํ ํฐํ ๊ณผ์ ์ ํตํด์ ๋ธ๋ผ์ฐ์ ๋ ๋ ธ๋๋ฅผ ์์ฑํ๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ ธ๋๋ค์ด ๋ชจ์ฌ์ ์ต์ข ์ ์ผ๋ก DOM ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
- ๋ ธ๋: ํ ํฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง DOM ํธ๋ฆฌ์ ๊ตฌ์ฑ๋จ์
๐ก ์ฐธ๊ณ ) DOMํธ๋ฆฌ๋ฅผ ์์ฑํ ๋<img>
๋<link>
์ ๊ฐ์ ํ๊ทธ๋ค์ ๋ง๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น ํ๊ทธ ์์ ๋ช ์๋์ด ์๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๋ค.<script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ DOM ์์ฑ์ ์ ์ ๋ฉ์ถ๊ณ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๋ค.
2๏ธโฃ CSS ํ์ฑ → CSSOM ํธ๋ฆฌ ์์ฑ
CSS ํ์ฑ ๊ณผ์ ์ HTML ํ์ฑ๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค.
์๋ฒ์์ ๋ฐ์ CSS ์ฝ๋(๋ฐ์ดํธ ๋ฐ์ดํฐ)๋ฅผ ๋ฌธ์๋ก ํด์ํ ๋ค
ํ ํฐํ ๊ณผ์ ์ ๊ฑฐ์ณ CSSOM(CSS Object Model) ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
3๏ธโฃ ๋ ๋ ํธ๋ฆฌ(Render Tree) ์์ฑ
๋ธ๋ผ์ฐ์ ๋ DOM ํธ๋ฆฌ์ CSSOMํธ๋ฆฌ๋ฅผ ํฉ์ณ์ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
๋ ๋ ํธ๋ฆฌ๋ ํ๋ฉด์ ์ค์ ๋ก ํ์๋ ์์๋ค๋ก๋ง ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์
<head>
์์ <script>
, <meta>
๋ฑ ๋น์๊ฐ์ ์ธ ์์๋
display: none
์ด ์ ์ฉ๋ ์์๋ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋์ง ์๋๋ค.
๐ก ์ ๊ทผ์ฑ์ ์ํด ์คํฌ๋ฆฐ๋ฆฌ๋์๋ ์ฝํ์ง๋ง ์๊ฐ์ ์ธ ์์๋ฅผ ์จ๊ฒจ์ค์ผ ํ๋ค๋ฉด
display: none์ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
์ ๊ทผ์ฑ์ ๊ณ ๋ คํ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํ๋ค.
https://cocoding420.tistory.com/17
์ ๊ทผ์ฑ ๊ณ ๋ คํ๊ธฐ(Aria-label, sr-only)
1. Aria-labelaira-label์ ์น ํ์ด์ง์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ HTML ์์ฑ์์๊ฐ ์๊ฐ์ ์ผ๋ก๋ ๋ช ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง๋ง ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๋ค์ด ์ดํดํ๊ธฐ ํ๋ค๊ธฐ ๋
cocoding420.tistory.com
4๏ธโฃ ๋ ์ด์์(Layout)
๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ์์์ ํฌ๊ธฐ์ ์์น๋ฅผ ๊ณ์ฐํ๋ ๊ณผ์ ์ด๋ค.
๋ ์ด์์ ๊ณผ์ ์์ ๋ ์ด์์ ํธ๋ฆฌ๊ฐ ์์ฑ๋๊ณ
์ขํ, ๋ฐ์ค ํฌ๊ธฐ ๋ฑ ๋ ๋๋ง์ ํ์ํ ์ ๋ณด๊ฐ ๋ด๊ธฐ๊ฒ ๋๋ค.
5๏ธโฃ ํ์ธํธ(Paint)
ํ์ธํธ ๋จ๊ณ์์๋ ๋ ์ด์์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํ์ธํธ ๊ธฐ๋ก์ ์์ฑํ๋ค.
ํ์ธํธ ๊ธฐ๋ก์๋ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ ์ด์ด๋ก ๋๋๊ณ ํ ์คํธ, ์, ์ด๋ฏธ์ง์ ๊ฐ์
์๊ฐ์ ์ธ ๋ถ๋ถ์ ๊ทธ๋ฆฌ๋ ์์ ๊ณผ ์์๋ฅผ ๋ ๋๋ง ํ๋ ์์๊ฐ ๋ด๊ธฐ๊ฒ ๋๋ค.
6๏ธโฃ ์ปดํฌ์งํ (Compositing)
ํ์ธํธ ๋จ๊ณ๊น์ง ์๋ฃํ๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ปดํฌ์งํ ๋จ๊ณ๋ฅผ ์งํํ๋ค.
์ปดํฌ์งํ ๋จ๊ณ์์๋ ํ์ธํธ ๋จ๊ณ์์ ๋ง๋ค์ด๋ ๋ ์ด์ด๋ค์ ์คํฌ๋ฆฐ์ ํฝ์ ๋ก ํํํ๊ณ
๋๋์ด์ ธ ์๋ ๋ ์ด์ด๋ค์ ํ๋๋ก ํฉ์ฑํด์ ํ์ด์ง๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
๐ก ์ปดํฌ์งํ ๋จ๊ณ์์๋ GPU์ ํ์ฉํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ ํ๋ฉด์ HTML, CSS, JS๋ฅผ ํํํ๊ฒ ๋๋ค.
ํ์ง๋ง CSS๋ฅผ ์์ ํด์ ํ๋ฉด์ ๋ณด์ด๋ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋ ๋
์ผ๋ จ์ ๋จ๊ณ๊ฐ ๋ค์ ์ํ๋๊ฒ ๋๋๋ฐ ๊ทธ ๊ณผ์ ๋ค์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํ๋ค.
๐ ๋ฆฌํ๋ก์ฐ(Reflow)
๋ฆฌํ๋ก์ฐ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํด์ผ ํ ๋ ๋ฐ์ํ๋ค.
DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง
๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ค์ ์์ฑํ๊ฑฐ๋ ๊ฐฑ์ ํ๋ ์์ ์ ๋งํ๋ค.
(→ 4. ๋ ์ด์์ ๊ณผ์ ์ด ๋ค์ ์งํ๋๋ ๊ฒ)
๐ง ๋ฆฌํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋์์ ๋
position
,left
,top
,right
,bottom
width
,height
,margin
,padding
,border
display
,float
,overflow
font-family
,font-size
,font-weight
,line-height
,text-align
,vertical-align
๋ฑ
- DOM ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋
- ๋ ธ๋ ์ถ๊ฐ/์ญ์
- ๋
ธ๋ ์ด๋ (
appendChild
,insertBefore
๋ฑ)
- ๋ธ๋ผ์ฐ์ ์ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ (๋ฐ์ํ ๋ ์ด์์)
๋ธ๋ผ์ฐ์ ์๊ฒ ์์ด์ ๋ ์ด์์์ ๋ณ๊ฒฝํ๋ ๋ฆฌํ๋ก์ฐ ์์ ์
์๋นํ ๋ถ๋ด์ด ๋ง์ด ๋๋ ์ฐ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌํ๋ก์ฐ๋ฅผ ์ต์ํ์ํค๋ ๊ฒ์ด ์ค์ํ๋ค.
๐จ ๋ฆฌํ์ธํธ(Repaint)
๋ฆฌํ์ธํธ๋ ๋ ์ด์์์ ๋ณํ๋ ์์ง๋ง ์๊ฐ์ ์ธ ์คํ์ผ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ํ๋ค.
์์์ ์์น๋ ํฌ๊ธฐ๋ ๊ทธ๋๋ก์ด๊ณ ์์, ๋ฐฐ๊ฒฝ, ๊ทธ๋ฆผ์์ ๊ฐ์
์๊ฐ์ ์์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
(→ 5. ํ์ธํ ๊ณผ์ ์ด ๋ค์ ์งํ๋๋ ๊ฒ)
๐ง ๋ฆฌํ์ธํธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
background
color
box-shadow
border-radius
,border-style
outline
,text-decoration
๋ฑ
๋ฆฌํ๋ก์ฐ๋ณด๋ค๋ ๋น๊ต์ ๋ถ๋ด์ด ์ ์ง๋ง,
๋ฆฌํ์ธํธ๋ ์์ฃผ ์ผ์ด๋๊ฒ ๋๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ์ ์์ผ๋ ์ฃผ์ํด์ผ ํ๋ค.
๐งฉ ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ์ ๊ด๊ณ
๋ฆฌํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ฉด ํญ์ ๋ฆฌํ์ธํธ๋ ๋ฐ์ํ๋ค.
→ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋ฉด์ ๋ค์ ๊ทธ๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์
๋ฆฌํ์ธํธ๋ ๋ฆฌํ๋ก์ฐ ์์ด๋ ์คํ๋ ์ ์๋ค.
→ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝํ CSS ์์ฑ์ด ๋ ์ด์์์ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์ด๋ผ๋ฉด ๋ฆฌํ๋ก์ฐ ์์ด ๋ฆฌํ์ธํธ์ ์ปดํฌ์งํ ๋ง ์คํ๋๋ค.
๐ก ์ฐธ๊ณwidth
๋ฅผ ๋ณ๊ฒฝํ๋ฉด → ๋ ์ด์์ ๋ค์ ๊ณ์ฐํด์ ๋ฐฐ์น(reflow) → ๋ค์ ๊ทธ๋ ค๋(repaint) → compositingcolor
๋ง ๋ณ๊ฒฝํ๋ฉด → ๋ ์ด์์ ๋ณํ ์์ → ๋ฆฌํ์ธํธ๋ง ์ํ → compositing
โก ์ต์ ํ ํ
- ์ ๋๋ฉ์ด์
์๋
position
์ด๋top
๋์transform
์ ํ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ ๋ฆฌํ๋ค. - (
transform: translateX(100px)
→ ๋ฆฌํ๋ก์ฐ/๋ฆฌํ์ธํธ๋ฅผ ๊ฑด๋๋ฐ๊ณ GPU ๋ ๋ฒจ์์ ํฉ์ฑ ๋จ๊ณ๋ง ๋ค์ ์ํ) opacity
๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌํ๋ก์ฐ/๋ฆฌํ์ธํธ๋ฅผ ์๋ตํ ์ ์์ด ์ฑ๋ฅ์ ์ข๋ค.- ๋ถํ์ํ ๋ฆฌํ๋ก์ฐ๋ฅผ ๋ง๊ธฐ ์ํด DOM ์กฐ์์ ํ ๋ฒ์ ๋ชจ์์(batch) ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
๐ ์ฐธ๊ณ
https://www.youtube.com/watch?v=z1Jj7Xg-TkU
https://yozm.wishket.com/magazine/detail/2909/
๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ, ๋ ๋๋ง ๊ณผ์ ์ดํดํ๊ธฐ | ์์ฆIT
๋ ๋๋ง(Rendering)์ด๋, ๋ธ๋ผ์ฐ์ ๊ฐ HTML, CSS, Javascript๋ฅผ ํด์ํด, ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ๋ฉด์ ์ค์ ๋ก ๋ํ๋ด๋ ๊ณผ์ ์ ๋งํฉ๋๋ค. ๋จ์ํ ํ์ผ์ ์ฝ๋ ๊ฒ๋ง ์๋๋ผ, ์น ํ์ด์ง์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ ์คํ์ผ๊ณผ ์ค
yozm.wishket.com