language/javascript

async์™€ defer

๊ฑด๋ง๋”” 2021. 11. 25. 14:55

<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