๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ์ด๊ธฐ ์ถ๋ ฅ์ ์ํด ์คํํด์ผ ํ๋ ์์๋ฅผ Critical Rendering Path(CRP)๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์ ํฌ๋ ์ค๋ Chrome ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ด ๊ณผ์ ์ ๋ํด ์์ธํ ์์๋ณผ ์์ ์
๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
์ถ์ฒ: 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
0) ๋ธ๋ผ์ฐ์ ์์ ์์ํ๊ธฐ
ํด๋น ๋ถ๋ถ์ Chrome์ ๋ด๋ถ ๋์ 2ํธ ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
๋ด์ฉ์ ์ ํํ๊ฒ ํ์
ํ๊ธฐ ์ํ์ฌ Chrome์ ๋ด๋ถ ๋์ 1ํธ ๋ด์ฉ์ ์ฝ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ถ์ฒ: https://developer.chrome.com/blog/inside-browser-part2/
์ถ์ฒ: 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 ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์์ ํ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ํ๋ก์ธ ์ค๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ ๋ฌํฉ๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค์์ ๋ด๋น๊ฒ์ด์ ์ด ์คํ๋์๋ค๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๊ฐ ํ์ธํ๊ณ ๋๋ฉด ๋ด๋น๊ฒ์ด์ ์ด ์๋ฃ๋๊ณ ๋ฌธ์ ๋ก๋ฉ ๋จ๊ณ๊ฐ ์์๋ฉ๋๋ค.
์ด๋ ์ฃผ์ ํ์์ค์ด ์ ๋ฐ์ดํธ๋๊ณ ๋ณด์ ํ์ ๋ฐ ์ฌ์ดํธ ์ค์ UI์ ์ ํ์ด์ง ์ฌ์ดํธ ์ ๋ณด๊ฐ ๋ฐ์๋ฉ๋๋ค.
ํญ์ ์ธ์
๊ธฐ๋ก์ด ์
๋ฐ์ดํธ๋์ด ์ด์ / ๋ค์ ๋ฒํผ์ผ๋ก ๋ฐฉ๊ธ ํ์ํ ์ฌ์ดํธ์ ์ด๋ํ ์ ์์ต๋๋ค.
ํญ์ด๋ ์ฐฝ์ ๋ซ์ ๋ ํญ / ์ธ์
๋ณต์์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ์ธ์
๊ธฐ๋ก์ด ๋์คํฌ์ ์ ์ฅ๋ฉ๋๋ค.
1) ๋ฌธ์ ๋ก๋ฉํ๊ธฐ
ํด๋น ๋ถ๋ถ์ Chrome์ ๋ด๋ถ ๋์ 3ํธ ์ ๋ด์ฉ๊ณผ ์น ์ฑ๋ฅ ์ต์ ํ์ ํ์ํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ฒ ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
์ถ์ฒ: https://www.slideshare.net/deview/125-119068291
์ง๊ธ๋ถํฐ ์ค๋ช ํ ๊ณผ์ ์ Renderer Process์ Main Thread ์์์ ์ผ์ด๋๋ ์์ ์ ๋๋ค.
1-1) DOM ํธ๋ฆฌ ์์ฑํ๊ธฐ
HTML ํ์ผ์ ๋ฐ๋๋ผ๋ ์ปดํจํฐ๊ฐ HTML ํ์ผ์ ๊ทธ๋๋ก ์ธ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ์ ์ปดํจํฐ๊ฐ ์ดํดํ๋ ํํ๋ก ํ์ฑ์ ํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
์ถ์ฒ: https://www.slideshare.net/deview/125-119068291/
DOM ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด <h1>
ํ๊ทธ์ ํ
์คํธ๋ฅผ Hello์์ Hi๋ก ๋ฐ๊ฟ ๋ ํด๋น Node๋ง ๋ฐ๊พธ๋ฉด ๋๊ธฐ์ ์ฝ๊ฒ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค.
DOM ๋ชจ๋ธ์ Document๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ธ์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ถ์ฒ: 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/
CSSOM๋ Cascade๊ฐ์ ์์ ๊ฐ๋
์ ์ ์ฉํ๊ธฐ ์ฉ์ดํ๋๋ก ํธ๋ฆฌ ํํ๋ก ๋์ด์์ต๋๋ค.
CSSOM๋ ๋ง์ฐฌ๊ฐ์ง๋ก JS API๊ฐ ์์ผ๋ฉฐ JavaScript๋ก CSS๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
1-3) JavaScript ์ฒ๋ฆฌํ๊ธฐ
JavaScript๋ HTML ํ์ฑ, User Input, requestAnimationFrame(), DOM Timer ๋ฑ ๋ค์ํ ๊ฒฝ๋ก๋ฅผ ํตํด ์คํ๋ฉ๋๋ค.
์ถ์ฒ: 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/
์๋ฅผ ๋ค์ด Head์ ๋ค์ด๊ฐ๋ <title>
์ ํ๋ฉด์ ๋ณด์ฌ์ง ํ์๊ฐ ์๊ธฐ์ Render Tree์ ๋ค์ด๊ฐ์ง ์์ต๋๋ค.
์ถ์ฒ: 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) ๋ ์ด์์์ด ์กด์ฌํฉ๋๋ค.
๊ทธ๋ฆผ์ ๊ดํธ๋ viewport ๊ธฐ์ค (๊ฐ๋ก ์์น, ์ธ๋ก ์์น, width, height)
๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ค ๋ชจ๋ธ์ width๋ ๋ถ๋ชจ ํฌ๊ธฐ์ width๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
ํ์ฌ ๊ทธ๋ฆผ์์
์ต์์ ์์๋ 1024๋ก ๊ณ์ฐํ๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์์ ์ค์ํ ๋ถ๋ถ์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ๋ Global ๋ ์ด์์์ ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ ์ด์์ํ๊ณ ,
Incremental
๋ ์ด์์์ ๋ถ๋ถ์ ์ผ๋ก ๋ ์ด์์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
Global ๋ ์ด์์์ด ๋ฐ์ํ๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ์๋์ฐ ์ฌ์ด์ฆ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ํฐํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ค๋ค์ block, inline ํํ๋ก ์กด์ฌํฉ๋๋ค.
block์ ๊ฒฝ์ฐ์ ํ ์ค์ ๋ชจ๋ ์ฌ์ฉํ๋ฉฐ(์๋-์) inline์ ์ข์ฐ๋ก(์) ์์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์์๋ค์ด ์ด๋ค ๋ฐ์ค ํ์
์ธ์ง๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋ช
์๋์ด ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ element์ ๋ฐ์ค
ํ์
์ ๋ณด๊ณ ๋ ์ด์์ ์์
์ ์งํํฉ๋๋ค.
์ถ์ฒ: https://developer.chrome.com/blog/inside-browser-part3/
๊ฒฐ๊ตญ ์ด ๊ณผ์ ์์ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ๋ ์ด์์ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
1-6) Paint
๋ธ๋ผ์ฐ์ ์ ํ์ธํธ ๊ณผ์ ์ ํ๋ฆฐํธํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
ํ ๋ฒ์ ํ ๋ ๋๋ง๋๋ ๊ฒ์ด ์๋๋ผ ํ๋ฆฐํฐ์ฒ๋ผ ์ฒ์ฒํ ํ ํฝ์
์ฉ ๊ทธ๋ฆฝ๋๋ค.
์ฆ, ํ์ธํธ๋ฅผํ๊ธฐ ์ํด์ Render Tree๋ฅผ ํ๋์ฉ ๊ทธ๋ ค์ผ ํฉ๋๋ค.
์ถ์ฒ: https://developer.chrome.com/blog/inside-browser-part3/
์ด ๊ณผ์ ์์ ์ ๊ณผ์ ๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ Tree๊ฐ ์๋๋ผ Records, ์ฆ ์์์ ๋ํ ๋ฉ๋ชจ๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
ํด๋น ๋ถ๋ถ์ ๋ํด์ ์๋์์ ์์ธํ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ณ๊ฒฝ๋ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ํ๋ก์ฐ
์ต์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง ํ๋ ๋ฐฉ์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
์ด์ ๋ ๋๋ง ๋ฐฉ์์์ ๋ก๋ฉ์ด ์ค์ฌ์ด์์ผ๋ ์ด์ ๋ ๋ก๋ฉ ์ดํ์ ๊ณผ์ ์ด ์ค์ํด์ก์ต๋๋ค.
์ฌ๊ธฐ์ ์๋กญ๊ฒ ๋ฑ์ฅํ Update Layer Tree์ Composite์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๊ฒ ์ต๋๋ค.
1-7) ์ฌ๋ฌ Layer๋ก ๋ถ๋ฆฌํ๊ธฐ
ํฌํ ์ต์ด๋ Figma ๊ฐ์ ํธ์ง ํด์ ์ฌ์ฉํด๋ณด์ จ๋ค๋ฉด Layer ๋ผ๋ ๊ฐ๋ ์ ์ต์ํ์ค ๊ฒ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ ์ด์ด๋ ํก์ฌํฉ๋๋ค. ๋ ๋๋ง ๋ ์์๋ค์ ์ธต ํํ๋ก ๋๋์ด ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Update Layer Tree๋ ๋ ๋๋ง์ด ๋ ์ต์ข
๋ ์ด์ด๋ค์ ๊ณ์ฐํ์ฌ ์์ฑํ๋ ๊ณผ์ ์
๋๋ค.
์ด ๊ณผ์ ์์๋
Layer Tree๋ฅผ ์์ฑํฉ๋๋ค.
Layer๊ฐ ์์ฑ๋๋ ์กฐ๊ฑด์ ์์ ๊ฐ์ต๋๋ค.
8๋ฒ์ ์์ธํ ๋ณด์๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์์ฑ ์กฐ๊ฑด ์ธ์๋ ์์ฒด์ ์ผ๋ก ๋ ์ด์ด๋ฅผ ์์ฑํ๊ธฐ๋ ํฉ๋๋ค.
1-8) Raster
Raster Thread๋ Recordํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ฐ๊ฐ์ ํ์ผ๋ค์ ๋นํธ๋งต์ผ๋ก ๋ง๋ค์ด๋ ๋๋ค.
์ถ์ฒ: 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/
DisplayItem(๋ ๋ ํธ๋ฆฌ, ๋ ์ด์ด ํธ๋ฆฌ)์ ๋ฐํ์ผ๋ก bitmap์ ๋ง๋๋ ์ผ์ rasterization์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด rasterization์ ์ผ๋ฐ์ ์ผ๋ก GPU ์์์ ์ด๋ค์ง๋๋ค.
chrome://gpu/ ์ ์ ์ํ์ฌ Rasterization
๊ฐ์ผ๋ก GPU ๊ฐ์์ด ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ธํ ์
์์ต๋๋ค.
์ถ์ฒ: 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
์ ํฌ๋ ์ด์ ํ๋ฉด์ ๋ชจ๋ ๊ทธ๋ ธ์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ํ๊ฑฐ๋, 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/
DOM ๋ ธ๋์ style ๋ณํ๊ฐ ์๊ฒผ๋ค๋ฉด ๋ค์ ํ๋ ์ ๋ computedStyle(CSSOM)์ ๋ค์ ๊ตฌํ ํ์๊ฐ ์๊ธฐ์ ํ์ํด๋ก๋๋ค. (SetNeedsStyleRecalc() ํธ์ถ)
layout์ ๋ณํ๊ฐ ์๊ฒผ๋ค๋ฉด SetNeedsLayout๋ง ํธ์ถํ์ฌ ์ด์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๋๋ก ํ ์ ์๊ฒ ๋ค์.
์ด๋ ๊ฒ ๋ณํ๊ฐ ์์ ๋ ์๋ก ๊ณ์ฐํ๋๋ก ํ์ํ๋ ๊ฒ์ invalidation์ด๋ผ๊ณ ํฉ๋๋ค.
Repaint
์คํฌ๋กค๊ณผ ์ ๋๋ฉ์ด์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋๋ฌด ๋ง์ด ๋ณํ๋๊ธฐ์ ์์ Invalidation ์ต์ ํ ๊ธฐ๋ฒ์ด ํฐ ํจ๊ณผ๋ฅผ ๋ณด๊ธฐ๊ฐ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค.
์ถ์ฒ: 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/
์์ ์ฌ๋ก ์ธ์๋ JavaScript๊ฐ ๋ฉ์ธ ์ค๋ ๋์์ ์คํ๋๊ธฐ์ ์ฝ๋ ์คํ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ฒ๋ฒ ๊ฑฐ๋ฆผ(jank)์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
2-2) Composite
๊ทธ๋ ๊ธฐ์ invalidation ๊ฐ์ ์ต์ ํ ๊ธฐ๋ฅ๋ ์์ง๋ง scroll๋ก ์ธํ repaint, rasterization & JavaScript ์ฝ๋๋ฅผ ์คํํ๋ ๋น์ฉ์ด ๋ง์ด ๋ค์ด rendering์ด ๋ฆ์ด์ง๋ ๋ฌธ์ ๋ฅผ ์ํํ๊ธฐ ์ํด Compositing์ด ๋์์ต๋๋ค.
์ถ์ฒ: https://tecoble.techcourse.co.kr/post/2022-09-26-life-of-pixel/
Composite์ ์ฌ๋ฌ ๋ ์ด์ด๋ค์ ํฉ์ฑํ์ฌ ํ ์ฅ์ ๋นํธ๋งต์ผ๋ก ๋ง๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ณด๋ ์น์ ๋จํธ์ ์ผ๋ก ๋ณด์ด๊ธฐ์ ํ๋์ ๊ทธ๋ฆผ์ผ๋ก ๋ณด์ผ ์ ์์ง๋ง, ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ ์ด์ด๋ณ๋ก ๊ทธ๋ฆฐ ํ์ Composite ๊ณผ์ ์์ ํฉ์ฑ์ ํ๊ฒ ๋ฉ๋๋ค.
์ด ๊ธฐ๋ฒ์ Tiled Backing Store ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ฉฐ ์ด ๊ธฐ๋ฒ์ ํตํด ํ๋ฉด์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํด๋น ์์์์ ๋ฐฐ๊ฒฝ์ ๊ทธ๋๋ก ๋๊ณ ์บ๋ฆญํฐ๋ง ๋ฐ๊พธ๋ฉฐ ๋ค์ ์ฅ๋ฉด์ ์ฐ์ถํ๊ณ ์์ต๋๋ค.
์ด๊ฒ๊ณผ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ฉด์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฒ์
๋๋ค.
๋ง์ฝ ๋ธ๋ผ์ฐ์ ์์ ๋ ์ด์ด๋ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ง ์๊ณ ํ ์ฅ์ผ๋ก ๋ ๋๋ง์ ํ๋ค๋ฉด ์ผ์ชฝ ์ฌ์ง์ ๋๋ญ์์ด ๋จ์ด์ง๋ ์ ๋๋ฉ์ด์ ์ด ์คํ๋ ๋๋ง๋ค cost๊ฐ ํฐ paint ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ ๊ฒ ์ ๋๋ค.
์ด๋ ๊ฒ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ์ฌ rasterizing ํ ํ ์์ฑ๋ bitmap๋ง ๋ณํํ๋ฉด ๋งค ํ๋ ์๋ง๋ค ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๊ทธ๋ฆฌ์ง ์์๋ ๋๊ธฐ์ ํจ์จ์ ์ ๋๋ค.
์ถ์ฒ: https://developer.chrome.com/blog/inside-browser-part3/
์ ๋ฆฌํด๋ณด์๋ฉด ์ปดํฌ์งํฐ ์ค๋ ๋๊ฐ ์๊ธด ์ดํ๋ก๋ ๋ ์ด์ด ํธ๋ฆฌ์ ํ์ธํธ ์์๊ฐ ๋ด๊ธด ํ์ธํธ ๋ ์ฝ๋๋ฅผ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ปดํฌ์งํฐ ์ค๋ ๋์๊ฒ ๋๊ธฐ๋ฉด ์ปดํฌ์งํฐ ์ค๋ ๋๋ ๊ฐ ๋ ์ด์ด๋ฅผ ํ์ผ ํํ๋ก ๋๋ ์ Raster Thread์๊ฒ ์ ๋ฌํฉ๋๋ค.
Threaded input
์ถ์ฒ: 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://www.slideshare.net/deview/125-119068291
- ๋ธ๋ผ์ฐ์ ๊ฐ web content๋ฅผ ๋ฐ์ต๋๋ค.
- DOM Tree๋ฅผ ์์ฑํฉ๋๋ค.
- style์ ๊ณ์ฐํฉ๋๋ค(resolve styles).
- layout์ ๊ณ์ฐํฉ๋๋ค.
- layer๋ฅผ ๋ง๋ญ๋๋ค.
- property tree๋ฅผ ๋ง๋ญ๋๋ค.
- layer๋ฅผ paintํฉ๋๋ค.
- layer + DisplayItemList(paint operations) + property tree๋ฅผ compositor thread๋ก commit(๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ)ํฉ๋๋ค.
- layer๋ฅผ ์ฌ๋ฌ ์์ ์กฐ๊ฐ(tile)๋ก ๋๋๋๋ค.
- SKIA library๋ฅผ ์ฌ์ฉํด tile์ rasterizing ํฉ๋๋ค.
- DrawQuads๋ฅผ ์์ฑํฉ๋๋ค.
- Skia์ OpenGL๋ฅผ ํตํด DrawQuads๋ฅผ ์ค์ ์คํฌ๋ฆฐ์ ๊ทธ๋ฆฝ๋๋ค. (pixelํ)
๊ณผ์ ์ ํตํด ์ต์ ํํ๋ ๋ฐฉ๋ฒ ์ดํดํ๊ธฐ
์ ํฌ๋ ๋ธ๋ผ์ฐ์ ๋์ ์๋ฆฌ๋ฅผ ์ ์์์ผ ํ ๊น์?
๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถํ๋ฉฐ ๋ ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ธ๋ผ์ฐ์ ์์ ๋์๊ฐ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ ๋ช ํํ ์๋ฉด ์ฑ๋ฅ์ ๊ณ ๋ฏผํ ๋ ๋ ๋น ๋ฅด๊ฒ ๋ต์ ์ป์ ์ ์์ ๊ฒ์ ๋๋ค.
์ด๋ค ๋์์ด ๋ฐ์ํ์ ๋ ์ด๋๋ฅผ ์์ ํด์ผ ํ๋์ง๋ฅผ ์๋ ๊ฒ์ ๊ต์ฅํ ์ค์ํฉ๋๋ค. ์ค๋ฅธ์ชฝ์ ์์ ํ๋ฉด ์์ ํ ์๋ก ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ค์ ๋ก ์ด๋ค ์์๊ฐ ์ด๋ค ํ์ดํ๋ผ์ธ์ ๋์ํ๊ฒ ๋ง๋๋์ง ๊ถ๊ธํ์๋ค๋ฉด CSS Triggers๋ฅผ ์ฌ์ฉํด๋ณด์ธ์!
Layout ์ต์ ํํ๊ธฐ
Layout์ด ํจ์จ์ ์ด๊ธฐ ์ํด์ element์ ๊ฐ์๋ 1,000๊ฐ ์ ๋๋ก ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋, ๋ถํ์ํ Layout cost๋ฅผ ์ค์ด๊ธฐ ์ํด์ ์ ๋๋ฉ์ด์
์ ์ฒ๋ฆฌํ ๋ transform
์ด๋ web animations
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Paint ์ต์ ํํ๊ธฐ
Paint ๊ณผ์ ์์ GPU Rasterization์ ์ฌ์ฉํ๋ฉด ๋์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง 10๋ฐฐ ์ ๋ ๋นจ๋ผ์ง๋๋ค. ์ด๊ฑธ ์ฌ์ฉํ๊ธฐ ์ํด์ meta name์ viewport๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์จ์ผ, ์คํ๋ผ, ํฌ๋กฌ์์ ์ฝํ ์ธ ๋ฅผ GPU๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋งํ๊ฒ ๋ฉ๋๋ค.
Composite ์ต์ ํํ๊ธฐ
ํด๋น ๊ณผ์ ์์ ๋ ์ด์ด๋ค์ ๋ค๋ฃจ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ฌด์์ ๋น ๋ฅด๋ค๊ณ Layer๋ฅผ ๋๋ฆฌ๋ ๊ฒ๋ณด๋จ 30๊ฐ ์ ๋์ Layer๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ํจ์จ์ ์ ๋๋ค.
์ฐธ๊ณ ์๋ฃ
- Chrome์ ๋ด๋ถ ๋์
- Rendering Engine
- Life of a pixel
- ์น ์ฑ๋ฅ ์ต์ ํ์ ํ์ํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ฒ
- Web IDL
- Slimming Paint
- ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์๊ณ ์์ด์ผ ํ ๋ธ๋ผ์ฐ์ ๋์ ๊ณผ์
- Software vs. GPU Rasterization in Chromium*