๐พ
(Vanilla JS๋ก ๊ฐ์๋ ๋ง๋ค๊ธฐ by ํฉ์ค์ผ๋) 3ํธ
May 12, 2023
๐พ ๊ธฐ์ ์ฑ ์คํฐ๋
23๋
1์๋ถํฐ ํ๋ ์ค์ธ ๊ต์ก์์, ๋ป์ด ๋ง๋ ๋๋ฃ๋ค๊ณผ ํจ๊ป ์งํํ๊ฒ ๋ ์คํฐ๋
์์ผ๋ก๋ ๊พธ์คํ ๊ธฐ์ ์์ ์ ์ฝ๊ณ ํจ๊ป ๋ฐ์ ํ๋ ์๊ฐ์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค!
๋ค์ด๊ฐ๊ธฐ์ ์์
์ด ๋ด์ฉ์ ๊ฐ๋ฐ์ ํฉ์ค์ผ - Vanilla Javascript๋ก ๊ฐ์๋ ๋ง๋ค๊ธฐ์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ ๊ธ์ ๋๋ค. ๋๋ถ๋ถ์ ๋ด์ฉ์ ํฉ์ค์ผ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๊ณ ๋ช๊ฐ์ ๊ฐ๋ ๋ด์ฉ ์ ๋๋ง ์ถ๊ฐ ํน์ ๋ด์ฉ ์์ฝ์ด ๋์ด์์ต๋๋ค. ์์ธํ ์ฌํญ์ ํฉ์ค์ผ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!(์ ๋ง ๋๋ฌด ์ข์ ๊ธ์ด์์~!)
Vanilla Javascript๋ก ๊ฐ์๋(VirtualDOM) ๋ง๋ค๊ธฐ
1. ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ๊ณผ์
ํ์ฑ
->์คํ์ผ
->๋ ์ด์์
->ํ์ธํธ
->ํฉ์ฑ
->๋ ๋๋ง
- ์ ๊ณผ์ ์ด ์งํ ํ, CSS๋ JS๋ฅผ ํตํด ๋ณํ๊ฐ ์๊ธธ ๊ฒฝ์ฐ re-ํ๋ก์ฐ(re-๋ ์ด์์) ๋๋ re-ํ์ธํธ ๊ณผ์ ์ด ์งํ๋๋ค.
1. ํ์ฑ
DOM Tree
- HTML์ ํ ๋๋ก DOM Tree๋ฅผ ์์ฑํ๋ค.
- Bytes: HTML์ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ๋๋ค. ex)
3C 62 6F 64 ...
- Characters: ๋ฐ์ดํธ๋ฅผ ๋ฌธ์ ๋จ์๋ก ์ฝ๋๋ค. ex)
<html><head>...<body>...</html>
- Tokens: ๋ฌธ์๋ฅผ ํ ํฐ ๋จ์๋ก ์ฝ๋๋ค. ex)
StartTag
: html,StartTag
: head, โฆ ,EndTag
: html - Nodes: ํ ํฐ์ ๋
ธ๋ ๋จ์๋ก ์ฝ๋๋ค. ex)
Element
: html,Element
: head, โฆ ,Element
: html - DOM: ๋
ธ๋๋ฅผ ํตํด DOM Tree๋ฅผ ์์ฑํ๋ค. ex)
Element
: html ->Element
: head -> โฆ ->Element
: html
- Bytes: HTML์ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ๋๋ค. ex)
CSSOM Tree
- CSS๋ฅผ ํ ๋๋ก CSSOM Tree๋ฅผ ์์ฑํ๋ค.
- Bytes: CSS๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ๋๋ค. ex)
62 6F 64 79 ...
- Characters: ๋ฐ์ดํธ๋ฅผ ๋ฌธ์ ๋จ์๋ก ์ฝ๋๋ค. ex)
body { ... }
- Tokens: ๋ฌธ์๋ฅผ ํ ํฐ ๋จ์๋ก ์ฝ๋๋ค. ex)
Selector
: body,Property
: background-color, โฆ ,Value
: #fff - Nodes: ํ ํฐ์ ๋
ธ๋ ๋จ์๋ก ์ฝ๋๋ค. ex)
Rule
: body { โฆ },Declaration
: background-color: #fff - CSSOM: ๋
ธ๋๋ฅผ ํตํด CSSOM Tree๋ฅผ ์์ฑํ๋ค. ex)
Rule
: body { โฆ } ->Declaration
: background-color: #fff
- Bytes: CSS๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ๋๋ค. ex)
2. ์คํ์ผ
- DOM Tree์ CSSOM Tree๋ฅผ ํตํด ์คํ์ผ์ ๊ณ์ฐํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ Render Tree๋ฅผ ๊ตฌ์ฑํ๋ค.
- Render Tree๋
ํ๋ฉด์ ํ์๋๋ ๋ ธ๋
(ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๋ ธ๋)๋ก๋ง ๊ตฌ์ฑ๋๋ค.
visibility: hidden
- ์์๋ฅผ ๋ณด์ด์ง ์๊ฒ ํ๋ค.
- ๋ ์ด์์์์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค.
- ๋ ๋๋ง ๊ณผ์ ์์ ์ ์ธ๋์ง ์๋๋ค.
display: none
- ์์๋ฅผ ๋ณด์ด์ง ์๊ฒ ํ๋ค.
- ๋ ์ด์์์์ ๊ณต๊ฐ๋ ์ฐจ์งํ์ง ์๋๋ค.
- ๋ ๋๋ง ๊ณผ์ ์์ ์ ์ธ๋๋ค.
3. ๋ ์ด์์
- ๊ธฐ๊ธฐ์ ๋ทฐํฌํธ ๋ด์์ ๊ฐ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ ์ด์์ ๊ณผ์ ์ด ๋ค์ ์ผ์ด๋๋ ๊ฒ์
๋ฆฌํ๋ก์ฐ
๋ผ๊ณ ํ๋ค. - ๋ ธ๋์ ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค.
%
๋ก ์ง์ ๋ ๊ฐ์px
๋จ์๋ก ๋ณํ๋๋ค.
4. ํ์ธํธ
- ๋ ์ด์์ ๊ณผ์ ์ ํตํด ๊ณ์ฐ๋ ์์น์ ํฌ๊ธฐ๋ฅผ ํ ๋๋ก ๊ฐ ์์๋ฅผ ๊ทธ๋ฆฐ๋ค.(px ๋จ์)
- ๋ ์ด์์์ด ์๋ฃ๋ ๋, ๋ธ๋ผ์ฐ์ ๊ฐ
Paint Setup
๋ฐPaint
์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค. - ์์น์ ๊ด๊ณ
์๋
์คํ์ผ(background-color, opacity, transform ๋ฑ)์Paint Setup
์ด๋ฒคํธ์์ ์ฒ๋ฆฌ๋๋ค. - ์์น์ ๊ด๊ณ
์๋
์คํ์ผ์Paint
์ด๋ฒคํธ์์ ์ฒ๋ฆฌ๋๋ค. - ์์ ๊ฒฐ๊ณผ๋
๋ ์ด์ด
ํํ๋ก ์์ฑ๋์ด ๊ฐ๋ณ ๋ ์ด์ด๋ก ๊ด๋ฆฌ๋๋ค.
5. ํฉ์ฑ
- ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด ๋ ์ด์ด๋ฅผ ํฉ์ฑํ๋ค.(๋ ์ด์ด๋ฅผ ํฉ์ณ์ ํ๋์ ํ๋ฉด์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ด๋ค.)
transform
,opacity
,will-change
๋ฑ์ ์ฌ์ฉํ๋ฉด ํฉ์ฑ ๊ณผ์ ์ด ์ผ์ด๋๋ค.
2. ์ฑ๋ฅ
1. ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ ๊ณผ์ ์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ
- ๋ฆฌํ๋ก์ฐ๊ฐ ์ผ์ด๋๋ ๊ฒฝ์ฐ
- DOM ์ถ๊ฐ/์ญ์
- CSS ์์ฑ ๋ณ๊ฒฝ์ ํตํด
๋ ์ด์์(๋๋น, ๋์ด, ๋์ด ๋ฑ)์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
- ex) margin, padding, width, heightโฆ
- ๋ฆฌํ์ธํธ๊ฐ ์ผ์ด๋๋ ๊ฒฝ์ฐ
- CSS ์์ฑ ๋ณ๊ฒฝ์ด
๊ธฐํํ์ ์ธ ๋ณํ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒฝ์ฐ
- ex) color, background-color, visibility, box-shadowโฆ
- CSS ์์ฑ ๋ณ๊ฒฝ์ด
2. ๋ธ๋ผ์ฐ์ ์์ ์ฑ๋ฅ์ ์ ์ผ ๋ง์ด ์ก์ ๋จน๋ ๊ฒ
๋ ๋๋ง ๊ณผ์
์์ ์ฑ๋ฅ์ ์ ์ผ ๋ง์ด ์ก์ ๋จน๋๋ค.re-ํ๋ก์ฐ
๊ฐ ์๊ฐ์ ์ผ๋ก ๋ง์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ์ ํ๋๋ค.