async์ defer
<head>์์ <script>๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ
<!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>Document</title>
<script src="main.js"></script>
</head>
1) user๊ฐ html ํ์ผ์ ๋ค์ด๋ฐ์์ ๋ ๋ธ๋ผ์ฐ์ ๋ ํ์ค์ฉ ํด์ ํ DOM ์์๋ก ๋ณํ(parsing)
2) parsing ์ค <script>ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ํ์ํ jsํ์ผ์ ์๋ฒ์์ ๋ค์ด๋ฐ๊ณ (fetching) ์คํ(executing)
3) ์ดํ ๋ค์ parsingํ๋ ๋ถ๋ถ์ผ๋ก ๋์ด๊ฐ
โ ๋จ์ : jsํ์ผ์ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ํฌ๋ฉด ์ฌ์ดํธ๋ฅผ ํ์ธํ ๋ ์๊ฐ์ด ๋ง์ด ์์๋๋ค
<body>์ ๋งจ ํ๋จ์ <script>๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ
<!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>Document</title>
</head>
<body>
<div></div>
<script src="main.js"></script>
</body>
</html>
1) ๋ธ๋ผ์ฐ์ ๊ฐ ์ญ parsingํ, ํ์ด์ง์ ์ค๋น๊ฐ ์๋ฃ๋์์ ๋ <script>๋ฅผ ๋ง๋์ fetching, executing
โ ์ฅ๋จ์ : user๊ฐ ๊ธฐ๋ณธ์ ์ธ html์ ์ปจํ ์ธ ๋ฅผ ๋นจ๋ฆฌ ํ์ธํ ์๋ ์์ง๋ง, ์ฌ์ดํธ๊ฐ js์ ์์กด์ ์ด๋ผ๋ฉด user๊ฐ ์๋ฏธ์๋ ์ปจํ ์ธ ๋ฅผ ๋ณด๊ธฐ ์ํ ์ ์์ ์ธ ํ์ด์ง๋ฅผ ํ์ธํ๊ธฐ ์ ๊น์ง๋ fetching, executing ํ๋ ์๊ฐ์ ๋ชจ๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
<head>์์ async ์์ฑ๊ฐ์ ์ด์ฉํ์ฌ <script>๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ
<!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>Document</title>
<script async src="main.js"></script>
</head>
1) ๋ธ๋ผ์ฐ์ ๊ฐ html ๋ค์ด ํ parsing ํ๋ค๊ฐ, async๋ง๋์ ๋ณ๋ ฌ๋ก main.js ํ์ผ fetchingํ๋ฉด์ parsing
2) main.js ๋ค์ด๋ก๋ ์๋ฃ๋๋ฉด, parsing ๋ฉ์ถ๊ณ executing js
3) js ์คํ ์๋ฃํ๊ณ ๋์ ๋๋จธ์ง html parsing
- ์ ์๋ <script>์์์ ์๊ด ์์ด, ๋ค์ด๋ก๋ ์๋ฃ๋ ์์๋๋ก js๋ฅผ ์คํํ๋ฏ๋ก, js๊ฐ ์์์ ์์กด์ ์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โ ์ฅ๋จ์ : fetching์ด parsing๊ณผ ๋ณ๋ ฌ์ ์ผ๋ก ์ผ์ด๋์, html ๋ค์ด๋ก๋ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค. ๊ทธ๋ฌ๋, js๊ฐ html์ด parsing๋๊ธฐ ์ ์ ์คํ๋๊ธฐ ๋๋ฌธ์, jsํ์ผ์์ DOM ์์ ์กฐ์ ์์ ์, html์ด ์ํ๋ ์์๊ฐ ์ ์๋์ด ์์ง ์์ ์ ์๋ค. ๋, parsingํ๋ ๋์์ js๋ฅผ ์คํํ๊ธฐ ์ํด block๋ ์ ์๊ธฐ ๋๋ฌธ์, user๊ฐ ํ์ด์ง๋ฅผ ๋ณด๋ ๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค.
<head>์์ defer ์์ฑ๊ฐ์ ์ด์ฉํ์ฌ <script>๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ
<!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>Document</title>
<script defer src="main.js"></script>
</head>
1) ๋ธ๋ผ์ฐ์ ๊ฐ html ๋ค์ด ํ parsing ํ๋ค๊ฐ, defer๋ง๋๋ฉด main.js๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ผ๊ณ ๋ช ๋ น(๋ง) ๋ด๋ฆผ
2) ๋๋จธ์ง html ๋๊น์ง parsing
3) parsing์ด ์๋ฃ๋ ํ ๋ค์ด๋ก๋ ๋ js๋ฅผ executing
- parsingํ๋ฉด์ ํ์ํ js ๋ค์ด๋ก๋ ๋ฐ๊ณ , parsing๋จผ์ ํด์ user์๊ฒ ํ์ด์ง ๋จผ์ ๋ณด์ฌ์ค ํ, js ์คํ
- ์ ์ํ <script>์ ์์๋๋ก js๊ฐ ์คํ๋๋ค
- ๊ฐ์ฅ ํจ์จ์ ์ธ option!
+) 'use strict';
- js๋ ๋งค์ฐ ์ ์ฐํ์ง๋ง, ์ํํ ์ธ์ด์ด๋ค.
- ์ฝ๋์ ์๋จ์ use strict๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด, ์ ์ธ๋์ง ์์ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ ๋ฑ์ ๋น์์์ ์ธ ํ๋์ ๋ฐฉ์งํ ์ ์๋ค.
- ์ฑ๋ฅ๊ฐ์ ๋ํ ๊ฐ๋ฅ!
์ถ์ฒ: youtube ๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ
https://www.youtube.com/watch?v=tJieVCgGzhs&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=2