์ค๋์ ์์์ผ์ด๋ ํน๋ณํ ์ฉ์ด ์ธ ๊ฐ !
์ฌ์ค ์ธ ๋จ์ด๋ก ๋ณด์ด์ง๋ง script async ์ script defer ์ ๋น๊ตํ๊ธฐ ์ํด ๋ฃ์ ๊ฒ ..! ๐คญ
์ค๋์ ์ด ๋ ๊ฐ์ ๋จ์ด๋ฅผ ์ฅ๋จ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋น๊ตํ๋ ํ๋ฆ์ผ๋ก ์์ฑํด ๋ณด๋ฌ ํ๋ค.
1. <script>
๋จผ์ <script>๋,๋ JavaScript ์ฝ๋๋ฅผ ๋ฌธ์์ ํฌํจ์ํค๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๊ทธ์ด๋ค. ์ด ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง์์ JavaScript ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ํธ์์ฉ์ ๊ตฌํํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ณดํต ๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ํ์ฑํ ๋, ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ฑํ๋ฏ๋ก,
ํ์ฑ ๊ณผ์ ์์ script ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ํด๋น js ํ์ผ์ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋ ๋๊น์ง DOM ์์ฑ์ ๋ฉ์ถ๋ค. (์์ ๊ทธ๋ฆผ ์ฐธ๊ณ !)
์ด๋ฌํ ์ด์ ๋ก ์คํฌ๋ฆฝํธ๊ฐ ํ์ด์ง ์์ฑ์ ๋ง์๋ฒ๋ฆฐ๋ค. ๊ทธ๋ผ ์ฌ์ฉ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ฐ์ ๋๊น์ง ์คํฌ๋ฆฝํธ์ ์๋์ ์์นํ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๊ฒ ๋๋ฏ๋ก, ๋ณดํต script ํ๊ทธ๋ body์ ์ตํ๋จ์ ์์นํ๋ค.
ํ์ง๋ง script ํ๊ทธ๊ฐ ๋งจ ์๋์ ์์นํ๊ฒ ๋๋ค๋ฉด, HTML ๋ฌธ์๋ฅผ ๋ค์ด๋ก๋ํ ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ฐ์ ์คํํ๋ฏ๋ก ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก script ํ๊ทธ์ async์ defer ์์ฑ์ด ์๋ค.
์ด ๋ ์์ฑ์ ๋ํด ํ๊ตฌํด๋ณด์!
๐ async vs defer ๋น๊ตํ๊ธฐ์ ์์!
HTML์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๋ ์ด๋ป๊ฒ ํฌํจํ๋๊ฒ ๋ ํจ์จ์ ์ธ์ง๋ฅผ ๊ด์ ์ผ๋ก ์ฝ์ด์ฃผ์๊ธธ ๋ฐ๋๋๋ค!
async์ defer๋ <script> ํ๊ทธ์์ ์ธ๋ถ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ฑ์ด๋ผ๋ ๊ณตํต์ ์ด ์์ต๋๋ค.
๋ํ ์ด ๋์ ์ฃผ์ ์ฐจ์ด์ ์ ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ก๋๋๋ ๋์๊ณผ ์น ํ์ด์ง์ ๋ ๋๋ง๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค!
2. <script> + async
async ์์ฑ์์ ๋ธ๋ผ์ฐ์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ค์ด๋ก๋ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ ์ ์๋ฏ, async ์คํฌ๋ฆฝํธ์์๋ HTML ํ์ฑ๊ณผ ๋์์ script๋ฅผ ๋ค์ด๋ฐ๊ณ ์๋ฃ๋๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค.
ํ์ง๋ง js ํ์ผ์ ์คํํ๋ ๋์์๋ HTML ํ์ฑ์ด ๋ฉ์ถ๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
async ์์ฑ์ DOM์ ์กฐ์ํ์ง ์๊ณ HTML ์์กด์ฑ์ด ์๋ ์ฝ๋์๋ง ์ฌ์ฉํ๊ธฐ!
๋ค์ ์ค๋ช
ํ๋ฉด, ๋ค์ด๋ก๋ ์์๋ HTML์ ์ ์๋ ์์๋๋ก ์ด๋ฃจ์ด์ง์ง๋ง,
์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์๋ง์ ์คํ๋๋ฏ๋ก ์คํ๋๋ ์์๋ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋ ์์๋ฅผ ๋ฐ๋ฅธ๋ค.
์ฆ, ์๋์ ๊ฐ์ด ๋ค์ด๋ก๋ ์์์ A๊ฐ ๋จผ์ ๋ผ๋, B๊ฐ ๋จผ์ ๋ค์ด๋ก๋ ์๋ฃ ๋๋ค๋ฉด ์คํ ์์๋ B->A๋ผ๋ ๋ป์ด๋ค.
// A → B ์์ผ๋ก ๋ค์ด๋ก๋, ๋ค์ด๋ก๋ ์๋ฃ์(B → A)์ผ๋ก ์คํ
<script async src="https://javascript.info/article/script-async-defer/A.js"></script>
<script async src="https://javascript.info/article/script-async-defer/B.js"></script>
2. <script> + defer
๋จผ์ defer ์์ฑ๋ ๋ธ๋ผ์ฐ์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ค์ด๋ก๋ํ๋ค๋ ์ ์์ async์์ฑ๊ณผ ๊ณตํต์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
defer ์์ฑ๋ html ํ์ฑ๊ณผ ๋์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ ํ๋ค.
๊ทธ๋ฌ๋ defer๋ async์๋ ๋ฌ๋ฆฌ ๋ค์ด๋ก๋๋ js ํ์ผ์ DOM(ํ์ด์ง) ์์ฑ์ด ์๋ฃ๋ ์งํ์ ์คํ๋๋ค.(=DOMContentLoaded ์งํ)
๊ทธ๋์ defer ์์ฑ์ DOM์ ์กฐ์ํด์ผ ํ๊ฑฐ๋, HTML์ด ๋ชจ๋ ํ์ฑ๋ ํ ์คํ๋์ด์ผ ํ๋ ์ฝ๋์ด๊ฑฐ๋, HTMl์ ์์กด์ ์ธ ์ฝ๋์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก, ์์ async ์์์ฝ๋์ ๊ฐ์ด defer๋ A->B ์์ผ๋ก ๋ค์ด๋ก๋๊ฐ ์์๋ผ๋, ์๋ฃ๋ jsํ์ผ์ด B->A ์์ด๋ผ๋ฉด, ์คํฌ๋ฆฝํธ ์คํ ์์๋ B->A์ด๋ค.
๋จ, ๋จผ์ ๋ค์ด๋ก๋ ๋ผ๋ ์งํ๊ฐ ์๋๋ผ ํ์ฑ ํ์ ์คํ๋๋ค๋ ๊ฒ์ด async์์ ์ฐจ์ด์ด๋ค!
'8์ Challenge : ๋จ์ด ๋ ๊ฐ์ฉ ์๊ฐํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
8/10 (0) | 2023.08.10 |
---|---|
[CS์ง์] ํ๋ ์์ํฌ(Framework)์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Library) (0) | 2023.08.09 |
[React] .js vs .jsx ์ฐจ์ด์ (0) | 2023.08.03 |
[8.1] ๋จธ์ ๋ฌ๋(Machine Learning)๊ณผ ๋ฅ๋ฌ๋(Deep Learning (0) | 2023.08.02 |
8์ Challenge! ๋งค์ผ ๊ฐ๋ฐ ๋จ์ด ๋ ๊ฐ์ฉ ์๊ฐํ๊ธฐ (0) | 2023.08.02 |