๋ค์ด๊ฐ๋ฉฐ
๋ญ๊ฐ ๋ค๋ฐ๋ ์์์ง๋ง ์ง๋๋ฒ CSR๊ณผ SSR์ ๋ํด ์์๋ณด๋ฉฐ,
์ฐ๋ฆฌ๊ฐ ์นํ์ด์ง์ ์ ์ํ๋ฉด '๋ ๋๋ง'์ด๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์์ฐ์ค๋ ์ด ๋ ๋๋ง์ด ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ถ๊ธํด์ ธ์,
์ผํ ๋ค์ด๋ณธ ๋จ์ด๋ค์ ๋๋์ด ์ ๋ฆฌํ ์๊ธฐ๊ฐ ์๋ค..!
๋จธ๋ฆฌ ํํธ์ ํฉ์ด์ ธ์๋ ๋จ์ด๋ค์ ํ๋ฒ ๋ง์ถฐ๊ฐ๋ฉฐ ์ด๋ฒ ๊ธ์์๋ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.
์ผ๋จ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ญ๊ฐ์?
๋ ๋๋ง์ด ์ผ์ด๋๋ ์ฃผ์ฒด, ์ฐ๋ฆฌ๊ฐ ๋งค์ผ๊ฐ์ด ํํ๊ฒ, ์ธํฐ๋ท ์ ์์ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์์ ์๋ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ์์ฆ์ ํฌ๋กฌ, ํ์ด์ดํญ์ค, ๋ค์ด๋ฒ ์จ์ผ, ๋งฅ ์ ์ ๋ผ๋ฉด ์ฌํ๋ฆฌ.
๊ทธ ์ธ์๋ ๋ธ๋ ์ด๋ธ, ๋น๋ฐ๋ ๋ฑ๋ฑ ๋ค์ํ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ค.
๊ทธ๋ผ ๋ ๋๋ง์ ๋ญ๋ฐ์?
render๋ผ๋ ๋จ์ด๋ ์ฌ์ ์ ์ผ๋ก make์ ๋์์ด์์ด๋ค.
์ ์ ๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ ๋ HTML ๋ฌธ์๋ CSS, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋ ๋ฌธ์๋ค์ด
๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ณผ์ ์ด ๋ฐ๋ก ๋ ๋๋ง์ด๋ค.
์ด ๊ณผ์ ์ ๋ ๋๋ง ์์ง์ ์ํด์ ์์ฑ๋๋๋ฐ, ์ฌ๊ธฐ์ ์ ์ ๋ธ๋ผ์ฐ์ ์ ๊ตฌ์กฐ์ ๋ํด์ ์ดํด๋ณด์.
์ด ์ค์์ ๋ ๋๋ง ์์ง์ ๋ธ๋ผ์ฐ์ ์ ์์ง์ ๋งํ๋๋ฐ, ์นํ์ด์ง๋ฅผ ๋ ๋ ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด๋ค.
์ ์ํ ์ฌ์ฉ์๋ฅผ ์ํด ์น ํ์ด์ง๊ฐ ๋ณด์ฌ์ง ์ ์๋๋ก ์ฌ๋ฌ ๋ฌธ์์ ์ฝ๋๋ค์ ์๊ฐ์ ์ผ๋ก ๋ณํ์์ผ์ฃผ๊ณ ,
์
๋ฐ์ดํธ๊ฐ ํ์ํ ๋ ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ํ ์ ์๋๋ก ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค.
์ด ์์ง์ ๋ธ๋ผ์ฐ์ ๋ง๋ค ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์๋ค.
๋ํ์ ์ผ๋ก ํฌ๋กฌ์ Blink, ์ฌํ๋ฆฌ๋ Webkit, ํ์ด์ดํญ์ค๋ Gecko๋ผ๋ ์์ง์ ์ฌ์ฉํ๋ค.
Critical Rendering Path
๋๋์ด ๋ ๋๋ง์ ์์๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ฐจ๋ก๋ค. ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์นํ์ด์ง์ ๋ฌธ์๋ฅผ ๋ถ๋ฌ์ค๊ณ ํ์ฑ ํ๋ค.
- DOM ํธ๋ฆฌ, CSSOM ํธ๋ฆฌ ์์ฑ
- Render ํธ๋ฆฌ ์์ฑ
- ๋ ์ด์์ = reflow (๋ ๋๋ง ํธ๋ฆฌ๋ฅผ ๋ฐฐ์นํ์ฌ ๋ ์ด์์์ ์ก์)
- ํ์ธํ = repaint (๋ ๋๋ง ํธ๋ฆฌ๋ฅผ ํ๋ฉด์ ์ค์ ํฝ์ ๋ก ๋ณํ)
์์๋ฅผ ๊ฐ๋ตํ๊ฒ ๋ณด์์ผ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด์.
1. ํ์ฑ
์ฌ์ฉ์๊ฐ ์นํ์ด์ง์ ์ ์ํ๋ฉด, ์๋ฒ๋ก๋ถํฐ HTML, CSS, JS ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
HTM, CSS ๊ฐ์ ๋ฌธ์๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ์ ์ ์๋๋ก ํ์ฑ ๊ณผ์ ์ ํตํด ๋ณํํ๋ค.
1-1. JS ํ์ฑ
ํ์ฑ ๊ณผ์ ์์ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ๋ ๋๋ง ์์ง์ ํ์ฑ์ ๋ฉ์ถ๊ณ JS๋ฅผ ํ์ฑํ๊ณ ์คํํ๋ค.
์ด ๊ณผ์ ์ด ๋๋๋ฉด ๋ค์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ๋ค.
<script> ํ๊ทธ๋ฅผ ์ตํ๋จ์ ์ฐ๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ด๊ฒ!
<body> ํ๊ทธ ์์์ ์ค๊ฐ์ <script> ํ๊ทธ๋ฅผ ๋ง๋๋ค๋ฉด, HTML ํ์ฑ์ด ์ค๋จ๋๊ณ JS๋ฅผ ํ์ฑํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ค async์ defer
<script> ํ๊ทธ์ async ๋๋ defer ์์ฑ์ ๋ถ์ฌํ๋ฉด <sciprt>๋ฅผ ๋น๋๊ธฐ ์ฒ๋ฆฌํ์ฌ HTML ํ์ฑ์ ์ฐจ๋จํ์ง ์๋๋ค.
<script ... async>
async ์์ฑ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์คํฌ๋ฆฝํธ ๋ฆฌ์์ค ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ฉด ํ์ฑ์ ์ค๋จํ๊ณ ๋ค์ด๋ ์์์ ๋ฐ๋ผ์
์คํฌ๋ฆฝํธ ํ์ผ์ ์คํํ๋๋ก ํ๋ค. ๊ธฐ๋ณธ ์์ฑ์ true์ด๊ณ async=false๋ก ๋ถ์ฌํ ๊ฒฝ์ฐ ์ ์ํ ์์๋๋ก ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค.
<script ... defer>
defer ์์ฑ์ HTML ํ์ฑ ๋์ ๋ฆฌ์์ค๋ฅผ ๋ค์ดํ๊ณ ๋ธ๋ผ์ฐ์ ์๊ฒ HTML ํ์ฑ์ด ๋๋๋ฉด ์ ์๋ ์์๋๋ก ์คํฌ๋ฆฝํธ ํ์ผ์ ์คํํ๋๋ก ํ๋ค.
2. DOM, CSSOM ์์ฑ
HTML๊ณผ CSS๋ ํ์ฑ๊ณผ์ ์ ํตํด์ ๊ฐ๊ฐ์ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
HTML์ DOM(Document Object Model), ๋น์ทํ ํ๋ก์ธ์ค๋ก CSS๋ CSSOM (CSS Object Model) ์ ํธ๋ฆฌ ํํ๋ก ๋ง๋ ๋ค.
์ดํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ DOM์ ์ฌ์ฉํ๋ค.
3. Render ํธ๋ฆฌ ์์ฑ
์ด์ DOM ๊ณผ CSSOM ๋์ ํฉ์ณ์ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋๋๋ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์์ง๋ง,
์ด ํธ๋ฆฌ์๋ ํ์ด์ง ๊ตฌ์ฑ์ ํ์ํ ๋
ธ๋๋ง ํฌํจ๋๋ค.
ํ์ด์ง ๊ตฌ์ฑ์ ํ์ํ์ง ์์ ๋
ธ๋๋ ๋ญ๊ฐ? ์ถ์๋ฐ ์์๋ก ์ฐ๊ด์ด ์๋ ํ๊ทธ๋ display:none ๊ฐ์ CSS ์์ฑ๋ค์ด ์๋ค.
4. ๋ ์ด์์
์ดํ ๋ง๋ค์ด์ง ํธ๋ฆฌ๋ก ๋ ์ด์์์ ๋ฐฐ์นํ๋ค.
๋ทฐํฌํธ. ๊ทธ๋ฌ๋๊น ํ๋ฉด์์ ์ฐจ์งํ๋ ์์ญ ๋ด์์ ๋
ธ๋๋ค์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋๋ฐ,
์ด๋ ์์์ ๋ฐ์ค ๋ชจ๋ธ(ํ๋ฉด์์ ์ฐจ์งํ๋ ์์ญ)์ด๋ ์ฌ๋ฐฑ๊ณผ ์คํ์ผ ์์ฑ ๋ฑ์ด ๊ณ์ฐ๋๋ค.
CSS์ em์ด๋ rem ๊ฐ์ ์๋์ ์ธ ๋จ์๋ ๋๋ฐ์ด์ค์ ๋ทฐํฌํธ์ ๋ง์ถฐ ํฝ์
(px)๋ก ๋ณํ๋๋ค.
์ด ๋ง์ ์ฆ ๋ธ๋ผ์ฐ์ ์ ํฌ๊ธฐ๊ฐ ๋ฐ๋๊ฑฐ๋ ์์์ ์์น๋ ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ด ๊ณผ์ ์ด ๋ค์ ๋ฐ์ํ๋ค๋ ๊ฒ!
5. ํ์ธํ
๋ง์ง๋ง์ผ๋ก ํ์ธํ
๋จ๊ณ. ๋ ๋ ํธ๋ฆฌ์ ํฌํจ๋ ์์๋ค์ ํ๋ฉด์ ์ค์ ํฝ์
๋ก ๋ณํํ์ฌ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํํ๋ก ์นํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค.
๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ํ ์คํธ ์์, ๊ทธ๋ฆผ์ ๋ฑ ๋ ์ด์์ ์์น๊ฐ ๋ณํ๋์ง ์๋ ์คํ์ผ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์ ๋ ๋ค์ ๋ฐ์ํ๋ค.
์ด ์๊ฐ์ ์ค์ด๋ฉด ๋ธ๋ผ์ฐ์ ์ ์นํ์ด์ง ์ถ๋ ฅ ์๊ฐ์ ์ค์ผ ์ ์๋ค!
(ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ Performance ํจ๋์์๋ ๋ ๋๋ง ๊ณผ์ ์ ์บก์ฒํ๊ณ ์๊ฐ์ด ์ผ๋ง๊ฐ ๊ฑธ๋ฆฌ๋์ง ์ง์ ํ์ธํ ์๋ ์๋ค.. ๐)
cssTriggers
CSS ์์ฑ๋ณ๋ก ๋ ๋๋ง์ ์ด๋ค ๊ณผ์ ์ ๋ค์ ๊ฑฐ์ณ์ผ ํ๋์ง ํ์ธํด๋ณผ ์ ์๋ ์ฌ์ดํธ๋ค.
ํ๋ฒ ์ฑ ๋๋ฌ๋ณด๋ฉด ๊ฝค ํฅ๋ฏธ๋กญ๋ค.
์ ๋ฆฌ
์ฌ๊ธฐ๊น์ง ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ํด์ ์์๋ณด์๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ด ์ฃผ์ ์ ๋ํด ์ฐพ์๋ณด๊ณ ์ ๋ฆฌํ๋ฉฐ ์๋กญ๊ฒ ์๊ฒ ๋ ๋ถ๋ถ์ด ๋ง๋ค. CSS๋ ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ค๋๊ฐ....
์นํ์ด์ง์ ์ ์ํด์ ํ๋ฉด์ ๋ฐ๋ก ๋ณด๋ ๊ฒ์ ์์๊ฐ์ ์ผ์ด์ง๋ง, ๊ฝค๋ ๋ณต์กํ ๊ณผ์ ๋ค์ ๊ฑฐ์น๋ค๋ ๊ฒ์ ์ค๊ฐํ๋ค.
๋ ๋๋ง ์๊ฐ์ ์ค์ผ ์ ์๋ค๋ ๊ฒ์, ์ด์ ๊ด๋ จํด์ ์ฑ๋ฅ์ ์ต์ ํํ ์๋ ์๋ค๋ ๊ฒ์ธ๋ฐ,
์ด๋ป๊ฒ ํด์ผ ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์๋ ๊ฒ์ผ๊น? ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋ฐ๋ก ์์ฑํ๋ ๊ฒ์ผ๋ก.. ๐
++
2023.03.27 JS ํ์ฑ ๋ด์ฉ ์ถ๊ฐ ์์
์ถ์ฒ
Rendering
https://medium.com/๊ฐ๋ฐ์์ํ๊ฒฉ/๋ธ๋ผ์ฐ์ ์-๋ ๋๋ง-๊ณผ์ -5c01c4158ce
https://www.youtube.com/watch?v=sJ14cWjrNis
https://velog.io/@grinding_hannah/Web-๋ธ๋ผ์ฐ์ -์๋-์๋ฆฌ
https://beomy.github.io/tech/browser/async-defer/
๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ
๋ฐฉ๋ฌธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐
ํฌ์คํ ๋ค์ ๊ณต๋ถ์ค์ธ ๋ด์ฉ์ ๊ธ๋ก ์์ฑํ ๊ฒ์ด๋ผ ๋ถ์กฑํ ์ ์ด ๋ง์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
๋ถ์กฑํ ๋ถ๋ถ์ ๋ํ ์ฝ๋ฉํธ๋ ์ธ์ ๋ ํ์์ ๋๋ค.
์ข์ ํ๋ฃจ ๋์ธ์, ๊ฐ์ฌํฉ๋๋ค! ๐
'๐ Studying > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Query parameter, Query String vs Path Variable (2) | 2022.12.14 |
---|---|
CORS๊ฐ ๋ญ๋ฐ.. ์๋ฌ ๋์ฒ๋ ์ด๋ป๊ฒ ํด์ผ.. ๐ฅน (0) | 2022.10.12 |
์นํฉ ๋น๋๋ถํฐ ๋ฐฐํฌ๊น์ง ํ๋ํ ์ฝ์ง ๊ณผ์ (0) | 2022.09.14 |
MPA,SPA ๋ถํฐ CSR, SSR ๊น์ง (0) | 2022.07.05 |
Comment