Tech.blog
Difference between defer and async
2021.05.16
thumbnail
#defer
#async

๐Ÿ’กAsync vs Defer

ํ˜„๋Œ€์˜ ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ script๋“ค์ด HTML๋ณด๋‹ค "๋ฌด๊ฒ๋‹ค". ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋‹ค์šด๋กœ๋“œํ•  ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ์„œ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค. ๊ทธ๋งŒํผ User์—๊ฒŒ ๋Šฆ๊ฒŒ ๋ณด์—ฌ์งˆ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๊ณ ์น˜๊ธฐ์œ„ํ•ด ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฐฑ์—”๋“œ์—์„œ ์ตœ์ ํ™” ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ณด๋‹ค ๋” ์‰ฝ๊ฒŒ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๋กœ๋”ฉํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์‹ฑ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

How Is HTML Parsed

๋ธŒ๋ผ์šฐ์ ธ๊ฐ€ HMTL์„ ๋กœ๋“œํ•˜๋Š”์ค‘์— <script>...</script> ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰์ด ๋œ ํ›„์— ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ์ด์–ด์„œ HTML์ด ๋กœ๋“œ๊ฐ€ ๋œ๋‹ค.

<!DOCTYPE html>
<html>
  <head>
    <script>
      // `HTML parser`๊ฐ€ ์ด์ค„์— ์˜ค๋ฉด `script`๊ฐ€ ์‹คํ–‰์ด ๋จ
      // ์‹คํ–‰์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ๋‚จ์€ `html`์„ `parsing`ํ•จ
    </script>
  </head>
  <body></body>
</html>

scriptํƒœ๊ทธ์˜ ์œ„์น˜์— ๋”ฐ๋ฅธ ์žฅ๋‹จ์ 

๐Ÿ’ฝ head์— script๊ฐ€ ์œ„์น˜

  • ๋ธŒ๋ผ์šฐ์ ธ๊ฐ€ ํ•œ์ค„์”ฉ ๋ถ„์„ โ‡’ head์—์„œ scriptํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด html parsingํ•˜๋Š”๊ฒƒ์„ ๋ฉˆ์ถ”๊ณ  ๋ถˆ๋Ÿฌ์˜จ๋‹ค. (์„œ๋ฒ„์—์„œ ๋‹ค์šด โ‡’ ์‹คํ–‰) ์‹คํ–‰ ํ›„์— ๋‹ค์Œ parsing์œผ๋กœ ์ง„ํ–‰ / ๋งŒ์•ฝ์— ์Šคํฌ๋ฆฝํŠธ ์•ˆ์˜ ํŒŒ์ผ์ด ๋งค์šฐ ํฌ๊ณ  ์ธํ„ฐ๋„ท์ด ๋Š๋ฆฌ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐํž˜๋“ค ๊ฒƒ์ด๋‹ค.

๐Ÿ’ฝ body์— script ์œ„์น˜

  • ์‚ฌ์šฉ์ž๊ฐ€ html ์ •๋ณด๋ฅผ ๋นจ๋ฆฌ ๋ณธ๋‹ค๋Š” ์žฅ์ ์€ ์žˆ์ง€๋งŒ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กด์ ์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ fetching๊ณผ ์‹คํ–‰์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํŽ˜์ด์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ฝ head์— async

<script asyn src="main.js"></script>

  • asyn๋Š” ๋ถˆ๋ฆฌ์–ธํƒ€์ž…์˜ ์†์ƒ๊ฐ’์ด๋ผ ์„ ์–ธํ•˜๋Š”๊ฒƒ๋งŒ์œผ๋กœ๋„ true๋กœ ์„ค์ •๋˜์–ด์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋ณ‘๋ ฌ๋กœ html parsing๊ณผ fetching(๋‹ค์šด๋กœ๋“œ)๊ฐ€ ๊ฐ™์ด ์ง„ํ–‰์ด ๋˜๋‹ค๊ฐ€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด parsing์„ ๋ฉˆ์ถ”๊ณ  js๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  • ์žฅ์  : ๋ฐ”๋”” ๋๋ณด๋‹ค fetching์ด ๊ฐ™์ด ์ง„ํ–‰๋ผ์–ด์„œ ๋‹ค์šด๋กœ๋“œ๋ฐ›๋Š” ์‹œ๊ฐ„๋งŒํผ ์ ˆ์•ฝ๋œ๋‹ค.

  • ๋‹จ์  : ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š”๋ฐ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. html์ด ์ „๋ถ€ parsing๋˜๊ธฐ ์ „์— js๊ฐ€ ์‹คํ–‰์ด ๋˜์–ด์„œ ์กฐ์ž‘ํ•˜๋ ค๋Š” ์‹œ์ ์— ํ•ด๋‹น html ๋ถ€๋ถ„์ด ์•„์ง ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. * ๋จผ์ € ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋œ ๊ฒƒ๋ถ€ํ„ฐ ์‹คํ–‰์ด๋จ. ์ •์˜๋œ ์ˆœ์„œ๋ž‘ ์ƒ๊ด€์—†์ด.

๐Ÿ’ฝ head์— defer

<script defer src="main.js"></script>

  • parsing์ด ๋˜๋Š”๋™์•ˆ js๋ฅผ ๋‹ค์šด์„ ๋ฐ›์•„๋†“๊ณ ,
  • parsing์ด ๋๋‚œ ํ›„ js๊ฐ€ ์‹คํ–‰์ด ๋œ๋‹ค.

** ๐Ÿ”” defer์˜ต์…˜์„ ์“ฐ๋Š” ์ด์œ  **:

  • htmlํŒŒ์ผ์ด parsing๋˜๋Š”๋™์•ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋™์‹œ์— ๋ฐ›๊ธฐ ๋•Œ๋ฌธ.
  • html์ด parsing์ด ๋œ ๋‹ค์Œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ.(๊ฐ™์ด ๋กœ๋“œ๋˜์ง€๋งŒ ์‹คํ–‰์€ html์ด parsing๋œ ์ดํ›„์—)

์ถœ์ฒ˜


ยฉ 2022. Tech Blog