๐ ๋ธ๋ผ์ฐ์ ์ ๊ณตํต์ ์ธ ๊ตฌ์กฐ
- User Interface : ์ฃผ์ ํ์์ค, ์ด์ /๋ค์/์๋ก๊ณ ์นจ ๋ฒํผ ๋ฑ ์นํ์ด์ง๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉ์์ ์ํธ์์ฉ ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- Broswer Engine : ์ ์ ์ธํฐํ์ด์ค์ ๋ ๋๋ง ์์ง์ ์ฐ๊ฒฐํ๋ ๋ธ๋ผ์ฐ์ ์์ง
- Rendering Engine : HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ์์ฒญํ ์น ํ์ด์ง๋ฅผ ํ์ํ๋ ๋ ๋๋ง ์์ง
- Networking : ๋คํธ์ํฌ ์์ฒญ์ ์ํ
- Javascript Interpreter : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ ์ธํฐํ๋ฆฐํฐ(ex. ํฌ๋กฌ์์ V8)
- UI Bacend : ์ฒดํฌ๋ฐ์ค๋ ๋ฒํผ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ์์ ฏ์ ๊ทธ๋ ค์ฃผ๋ UI Backend
- Data Persistance : ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ ์ฟ ํค์ ๊ฐ์ด ๋ณด์กฐ ๊ธฐ์ต์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํํธ
๐ ๋ ๋๋ง ์์ง - ํฌ๋กฌ ๊ธฐ์ค ์ค๋ช
๋ธ๋ผ์ฐ์ ๋ง๋ค ๋ค๋ฆ
Safari : Webkit
Firefox : Gecko
Chrome : Blink(์นํท์์ ํ์)
โ ๋ ๋๋ง ์์ง์ ๋ชฉ์
1. HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฑ ์นํ์ด์ง์ ํฌํจ๋ ๋ชจ๋ ์์๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
2. ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋, ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ํ ์ ์๋๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค.
โ ๋ ๋๋ง ์์ง์ ๋์ ๊ณผ์ - Critical Rendering Path
1. Dom Tree ์์ฑ
i. html ์ฝ๋๋ ์ดํ ๋ถ์์ ํตํด html5 ํ์ค์ ์ง์ ๋ ๊ณ ์ ํ ํ ํฐ์ผ๋ก ๋ณํ๋จ(ํ ํฐํ)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋์ ๊ณผ์ </title>
</head>
<body>
<!--์ฃผ์-->
<h1>๋ธ๋ผ์ฐ์ ๋ ๋๋ง</h1>
<p>์์</p>
</body>
</html>
- StartTag : htmlํ๊ทธ๊ฐ ์ด๋ฆผ
- EndTag : htmlํ๊ทธ๊ฐ ๋ซํ
ii. ๋ธ๋ผ์ฐ์ ์ ๋ ์ฑ(๊ตฌ๋ฌธ ๋ถ์) ๊ณผ์ - ํ ํฐ์ด ํด๋น ์์ฑ๊ณผ ๊ท์น์ ์ ์ํ๋ ๋ ธ๋ ๊ฐ์ฒด๋ก ๋ณํ
iii. ๊ฐ ๋ ธ๋๊ฐ ์๋ก ์ฐ๊ด์ฑ์ ๊ฐ์ง ์ ์๋๋ก ํธ๋ฆฌ๋ฅผ ์์ฑ - Dom Tree
- ์ต์์๋ document ๊ฐ์ฒด
- ํ๊ทธ๋ element node
- ํ๊ทธ์ ์์๋ attribute node
- ํ ์คํธ๋ text node
- ์ฃผ์์ comment node
2. CSSOM Tree ์์ฑ
body {
margin: 0;
padding: 0;
text-align: center;
}
h1 {
color: red;
}
body {
font-size: 20px;
text-align: right;
}
div {
width: 50%;
margin: 0 auto;
}
span {
display: none;
}
3. Render Tree ์์ฑ = Dom Tree + Cssom Tree
- ํ๋ฉด์ ํ์๋์ด์ผ ํ ๋ชจ๋ ๋ ธ๋์ ์ปจํ ์ธ , ์คํ์ผ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ
- ๋๋ต์ ์ธ ๊ณผ์
document ๋ถํฐ ๊ฐ ๊ฐ์ฒด๋ฅผ ์ํํ๋ฉด์ ๊ฐ๊ฐ์ ๋ง๋ cssom์ ์ฐพ์์ ๊ท์น์ ์ ์ฉ
→ ๋ ๋์ ๊ด๋ จ๋ ์์๋ฅผ ๋ ๋ ํธ๋ฆฌ์ ํฌํจ
→ meta ํ๊ทธ๋ display:none ์์ฑ์ ๊ฐ์ง ์์๋ ๋ ๋์ ๊ด๊ณ๊ฐ ์์ผ๋ฏ๋ก ๋ ๋ํธ๋ฆฌ์ ํฌํจx
4. Layout(Reflow)
- ๋ทฐํฌํธ ๋ด์ ์์๋ค์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐ
- ๋ฐ์ค๋ชจ๋ธ์ ๋ฐ๋ผ ํ ์คํธ๋ ์์์ ๋ฐ์ค๊ฐ ํ๋ฉด์์ ์ฐจ์งํ๋ ์์ญ์ด๋ ์ฌ๋ฐฑ ๊ทธ๋ฆฌ๊ณ ์ด์ธ์ ์คํ์ผ ์์ฑ์ด ๊ณ์ฐ๋จ
- ํผ์ผํธ๋, em์ ํฝ์ ๋จ์๋ก ๋ณํ๋จ
5. Paint
- ๋ ๋ํธ๋ฆฌ์ ํฌํจ๋ ์์๋ ํ ์คํธ, ์ด๋ฏธ์ง ๋ฑ์ด ์ค์ ํฝ์ ๋ก ๊ทธ๋ ค์ง๋๋ก ๋ณํํ๋ ๊ณผ์
๐ ์ธ์ฌ์ดํธ
Critical Rendering Path์ ์๊ฐ์ ์ค์ด๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ์ค์ผ ์ ์๋ค.
โ UI๊ฐ ์ ๋ฐ์ดํธ ๋๋ 3๊ฐ์ง ์ํฉ
JavaScript → Style → Layout → Paint → Composite
1. ๋ค์ Layout์ด ๋ฐ์
ex. ์ฃผ๋ก ์์์ ํฌ๊ธฐ๋ ์์น๊ฐ ๋ฐ๋ ๋, ํน์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํฌ๊ธฐ๊ฐ ๋ฐ๋์์ ๋ ๋ค์ ๋ฐ์
JavaScript → Style → Layout → Paint → Composite
2. Paint ๋ถํฐ ๋ค์ ๋ฐ์
ex. ์ฃผ๋ก ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ํ ์คํธ ์์, ๊ทธ๋ฆผ์ ๋ฑ ๋ ์ด์์์ ์์น์๋ ๋ณํ๋ฅผ ์ผ์ผํค์ง ์๊ณ ์คํ์ผ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๊ฒฝ์ฐ
JavaScript → Style → Layout → Paint → Composite
3. *๋ ์ด์ด์ ํฉ์ฑ๋ง ๋ค์ ๋ฐ์
- ์ฑ๋ฅ์์ผ๋ก ๊ฐ์ฅ ํฐ ์ด์ ์ ๊ฐ์ง
*๋ ์ด์ด?
- ํ์ธํ ํ ์์ญ์ ๋๋์ด ๋์ ๊ฒ์ ๋ ์ด์ด๋ผ๊ณ ํจ
- ๋ ๋ ํธ๋ฆฌ์ ์๋ ๋ ธ๋๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ด์ด์ ํฌํจ ๋จ, ๋ ์ด์ด ๋ํ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ
- ๋ ๋๋ง ์์ง์ด ํ์ธํ ๊ณผ์ ์์ ๋ ์ด์ด๋ฅผ ๊ฐ๊ฐ ๊ทธ๋ฆฌ๊ณ ํ๋์ ๋นํธ๋งต์ผ๋ก ์ปดํฌ์ง ์์ผ์ ํ์ด์ง๋ฅผ ์์ฑ
์ฆ, CSS ์์ฑ์ด ๋ณ๊ฒฝ๋์์ ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ ์ค ์ด๋์๋ถํฐ ์ ๋ฐ์ดํธ ๋๋์ง๋ฅผ ์ ์ ์๋ ์ฌ์ดํธ๋ฅผ ํ์ฉํด์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ ์์๋ก ์คํ์ผ๋ง์ ํด๋ณด๋ ๊ฒ ๋ํ ์ฑ๋ฅ ์ต์ ํ์ ํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์
- ex. ์ ๋๋ฉ์ด์ ์์ฑ์ left๋ฅผ ๋จน์ด๋ฉด, ํ์ธํธ ๊ณผ์ ๋ถํฐ ๋ค์ ์ผ์ด๋๋ค. ํ์ง๋ง transform์์ฑ์ ๋จน์ด๋ฉด composite ๊ณผ์ ๋ง์ผ๋ก๋ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค ์ด๋ด ๊ฒฝ์ฐ transform์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์
- css ํธ๋ฆฌ๊ฑฐ : https://csstriggers.com
์ฐธ๊ณ : ๋ ๋๋ง ๊ณผ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
- HTML/CSS ํ์ฑ ๊ณผ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋๋ง ์์ง์ HTML์ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ๋ฉฐ DOM์ ์์ฑํด ๋๊ฐ๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ <script> ํ๊ทธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฝํ ์ธ ๋ก ๋ด์ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค.
- ๊ทธ๋ฆฌ๊ณ <script> ํ๊ทธ์ src ์ดํธ๋ฆฌ๋ทฐํธ์ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ฒ์ ์์ฒญํ์ฌ ๋ก๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด๋ <script> ํ๊ทธ ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ๊ธฐ ์ํด โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ ์ด๊ถ์ ๋๊ธด๋ค. ์ดํ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ด ์ข ๋ฃ๋๋ฉด โ ๋ ๋๋ง ์์ง์ผ๋ก ๋ค์ ์ ์ด๊ถ์ ๋๊ฒจ HTML ํ์ฑ์ด ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ HTML ํ์ฑ์ ์์ํ์ฌ DOM ์์ฑ์ ์ฌ๊ฐํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ โ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง์ด ์๋ โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ๋ฆฌํ๋ค. โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ์ฌ CPU๊ฐ ์ดํดํ ์ ์๋ ์ ์์ค ์ธ์ด(low-level language)๋ก ๋ณํํ๊ณ ์คํํ๋ ์ญํ ์ ํ๋ค.
- โก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ์ฌ AST(Abstract Syntax Tree: ์ถ์์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํํ ์ ์๋ ์ค๊ฐ ์ฝ๋(intermediate code)์ธ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ค.
- ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ
- ๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ๋ DOM API๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ DOM์ด๋ CSSOM์ด ๋ณ๊ฒฝ๋๋ค.
- ์ด๋ ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๊ณ ๋ณ๊ฒฝ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ด์์๊ณผ ํ์ธํธ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ๋ค. ์ด๋ฅผ ๋ฆฌํ๋ก์ฐ(reflow), ๋ฆฌํ์ธํธ(repaint)๋ผ ํ๋ค.
์ฐธ๊ณ
junh0328, ํ๋ก ํธ์๋๊ธฐ์ ๋ฉด์ ํธ๋๋ถ
์ฒดํ, ์ฐ์ํํ ํฌ 10๋ถํ ํฌํก
https://www.youtube.com/watch?v=sJ14cWjrNis
https://velog.io/@moonshadow/CSSOM
'CS ๊ณต๋ถ - front' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] var vs let vs const (0) | 2023.02.15 |
---|---|
[React] ํจ์ํ๊ณผ ํด๋์คํ์ ์ฅ๋จ์ ๋น๊ต (0) | 2023.02.15 |
[JS] ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ (0) | 2023.02.02 |
[JS] ์ฝ๋ฐฑ ํจ์ (0) | 2023.02.02 |
[JS]๋ณ์ ์ ์ธ์ ์คํ ์์ ๊ณผ ๋ณ์ ํธ์ด์คํ (0) | 2023.01.31 |