without async, defer
<head>
<script src="main.js"></script>
</head>
<body>
<div></div>
<script src="main.js"></script>
</body>
- html parsing ๐ js fetching ๐ js executing
head + async
<head>
<script async src="main.js"></script>
</head>
- async ์์ฒด๊ฐ boolean ๊ฐ์ผ๋ก, html parsing๊ณผ js fetching์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ
- async ๋จ์
- js๊ฐ ์กฐ์ํ๋ ค๊ณ ํ๋ ์์(html)๊ฐ ์ ์ ๋์ด ์์ง ์์ ์๋ ์๋ค.
- ์ฌ์ ํ executing ์๊ฐ ๋์ ๋ฉ์ถ๋ค๋ณด๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ณด๋๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค.
- ์ฌ๋ฌ๊ฐ์ js ํ์ผ์ script๋ก ๋ถ๋ฌ์ฌ ์, async๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์นญ๋๋ ์์๋๋ก ์คํ์ํจ๋ค.
์ฆ ์ ์๋ ์์์ ์๊ด์์ด ๋ค์ด๋ก๋ ๋ ์์๋๋ก ์คํ๋๊ธฐ์ ๋ง์ฝ js๊ฐ ์์์ ์์กด์ ์ด๋ผ๋ฉด ์ ํฉํ์ง ์์ ์ ์๋ค.
<head>
<script async src="a.js"></script>
<script async src="b.js"></script>
<script async src="c.js"></script>
</head>
head + defer
<head>
<script defer src="main.js"></script>
</head>
- js fetching๊ณผ html parsing ๋ณ๋ ฌ์ ์ผ๋ก ์คํ
- html parsing์ด ๋ค ๋๋ ์ดํ์ js executing
js fetching html parsing ์๋ฃ ํ ๐ js executing
์ฐ๋ฆฌ๊ฐ ์ ์ํ js ํ์ผ ์์(์์ ์์์ ๊ฒฝ์ฐ a > b > c)๊ฐ ์ง์ผ์ง๋ค.
์ฐธ๊ณ : ๋๋ฆผ์๋ฆฌ์ฝ๋ฉ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ด๊ฐ์