[javascript] async vs defer

Yongwoo Choยท2022๋…„ 2์›” 2์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
57/98
post-thumbnail

<script>๋ฅผ <head>์•ˆ์— ์ž‘์„ฑ

<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="main.js"></script>
  </head>
  <body></body>
</html>

๐Ÿ‘Ž html ๋ฌธ์„œ parsing์ค‘ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด parsing์„ ๋ฉˆ์ถ”๊ณ  script ํƒœ๊ทธ์•ˆ์˜ main.jsํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—…์„ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค. ์‹คํ–‰์ด ์™„๋ฃŒ ๋œ ํ›„์— html ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ parsing ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณด๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๊ณ  main.js ํŒŒ์ผ์€ ๋กœ๋“œ๋˜์—ˆ์ง€๋งŒ html์„ ์•„์ง parsing ํ•˜์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

<script>๋ฅผ <body>๋งจ ๋’ค์— ์ž‘์„ฑ

<!DOCTYPE html>
<html lang="en">
  <head> </head>
  <body>
    <h1>Hello World!</h1>
    <script src="main.js"></script>
  </body>
</html>

๐Ÿ‘ html ํŒŒ์ผ์˜ parsing์ด ์™„๋ฃŒ๋œ ํ›„ main.js๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— jsํŒŒ์ผ์ด ๋จผ์ € ๋กœ๋“œ๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ‘Ž ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” jsํŒŒ์ผ์˜ ์˜์กด๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋‹ค๋ ค์•ผ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ HTML5์—์„œ script ํƒœ๊ทธ์˜ ์†์„ฑ์ธ async์™€ defer๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

async ์†์„ฑ

<!DOCTYPE html>
<html lang="en">
  <head>
    <script async src="main.js"></script>
  </head>
  <body></body>
</html>

โœ” async์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html์„ parsingํ•˜๋‹ค๊ฐ€ async๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด jsํŒŒ์ผ์ด ์‹คํ–‰ํ•˜๋„๋ก ๋ช…๋ น๋งŒ ํ•ด๋†“๊ณ  html parsing์„ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค jsํŒŒ์ผ์ด ๋ชจ๋‘ load๊ฐ€ ์™„๋ฃŒ ๋˜์—ˆ์„๋•Œ html parsing์„ ๋ฉˆ์ถ”๊ณ  jsํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์‹คํ–‰์™„๋ฃŒํ›„ ๋ฉˆ์ท„๋˜ html parsing์„ ๋‹ค์‹œ ์ง„ํ–‰์‹œํ‚จ๋‹ค.

๐Ÿ‘Ž jsํŒŒ์ผ์ด ์ˆœ์„œ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ, jsํŒŒ์ผ์ด ์™„๋ฃŒ๋˜๋Š” ๋Œ€๋กœ ์ง„ํ–‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

defer ์†์„ฑ

<!DOCTYPE html>
<html lang="en">
  <head>
    <script defer src="main.js"></script>
  </head>
  <body></body>
</html>

โœ” defer์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด html์„ parsingํ•˜๋‹ค๊ฐ€ jsํŒŒ์ผ์„ ๋งŒ๋‚˜๋ฉด jsํŒŒ์ผ์ด ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๋„๋ก ๋กœ๋“œ๋ฅผ ํ•œ๋‹ค. html parsing์€ ๊ณ„์† ์ง„ํ–‰์„ ํ•˜๊ณ , ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด jsํŒŒ์ผ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๐Ÿ‘ DOM ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ jsํŒŒ์ผ์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์„ฑ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋œ๋‹ค.

profile
Frontend ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค ๐Ÿ˜Ž

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN