Async์™€ Defer - ์—˜๋ฆฌ๋‹˜๐ŸŽก:]

๊น€๋ฏผ์žฌยท2021๋…„ 7์›” 11์ผ
0

TIL, Core JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
4/11
post-thumbnail

*๐Ÿ”Study Keyword :

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๐Ÿ”‘Async์™€ Defer์˜ ์˜๋ฏธ์™€ ์ฐจ์ด๋ฅผ ์ฒ™!์ฒ™! ์„ค๋ช…ํ•ด๋ณด์ž

- ์Šคํฌ๋ฆฝํŠธ์˜ ๋กœ๋”ฉ ๋ฐฉ๋ฒ•

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

โ–ถ 1. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ—ค๋” ํƒœ๊ทธ์— ํฌํ•จ

  • 1>์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ—ค๋” ํƒœ๊ทธ์— ํฌํ•จํ•˜๋ฉด HTML์„ Parsingํ•˜๋‹ค ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด blocked ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ€ Parsing์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  1>JS ํŒŒ์ผ์„ ์„œ๋ฒ„์—์„œ ๋‹ค์šด๋ฐ›์€ ํ›„ 2> ๊ทธ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ Parsing์„ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  • ๋‹จ์ ์€ JS ํŒŒ์ผ์ด ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ์ธํ„ฐ๋„ท์ด ๋Š๋ฆฐ ํ™˜๊ฒฝ์ด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณด๊ธฐ๊นŒ์ง€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค๋Š” ์ ์ด๋‹ค.
    => ์ฆ‰, ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ—ค๋” ํƒœ๊ทธ ๋‚ด๋ถ€์— ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์€ ์ข‹์ง€ ์•Š์€ ๋ฐฉ์‹์ด๋‹ค.

โ–ถ 2. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋ฐ”๋”” ํƒœ๊ทธ ์ง์ „์— ํฌํ•จ

  • 2>์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋ฐ”๋”” ํƒœ๊ทธ ์ง์ „์— ํฌํ•จํ•˜๋ฉด HTML์„ Parsingํ•˜๋ฉด์„œ page๊ฐ€ ๋ชจ๋‘ ์ค€๋น„๋œ ์ดํ›„์— ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํŒจ์นญํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ฒŒ๋œ๋‹ค.
  • ์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ์‚ฌ์šฉ์ž๋“ค์ด JS ํŒŒ์ผ์„ ๋ฐ›๊ธฐ ์ „์— ํŽ˜์ด์ง€๊ฐ€ ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ์ ์ธ HTML ์ปจํ…์ธ ๋ฅผ ๋นจ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ๋‹จ์ , ๋งŒ์•ฝ ์›น์‚ฌ์ดํŠธ๊ฐ€ JS์˜ ์˜์กด์ ์ธ ์ƒํƒœ(EX> ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋ฏธ์žˆ๋Š” ์ปจํ…์ธ ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด 1.JS๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹ 2. DOM ์š”์†Œ๋ฅผ ๊พธ๋ฉฐ์ค˜์•ผํ•˜๋Š” ๋“ฑ..)๋ผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์ƒ์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ธฐ ์ „๊นŒ์ง€ JS ํŒŒ์ผ ํŽ˜์นญ์„ ๋Œ€๊ธฐํ•ด์•ผํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค.

Async ์™€ Defer

โ–ท 3. async ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ฐ€์ง„ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ—ค๋” ํƒœ๊ทธ์— ํฌํ•จ

  • async๋Š” ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… ์†์„ฑ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ TRUE๋กœ ์„ค์ •๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ๋‹ค์šด๋ฐ›์•„ Parsingํ•˜๋‹ค๊ฐ€ async ์†์„ฑ ๊ฐ’์„ ์ง€๋‹Œ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ณ‘๋ ฌ๋กœ JS ํŒŒ์ผ์„ ํŒจ์นญํ•˜๋ผ๋Š” ๋ช…๋ น์„ ํ•˜๊ณ  ๋‹ค์‹œ Parsing ์ง„ํ–‰ํ•˜๋‹ค JSํŒŒ์ผ ํŒจ์นญ์ด ์™„๋ฃŒ๋˜๋Š” ์ˆœ๊ฐ„ Parsing์„ ๋ฉˆ์ถ”๊ณ  JSํŒŒ์ผ์„ ์‹คํ–‰ํ•œ ๋’ค ๋‚˜๋จธ์ง€ html ํŒŒ์‹ฑํ•œ๋‹ค.
  • ์žฅ์ , ๋ฐ”๋”” ํƒœ๊ทธ ์ง์ „์— ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹จ Feching์ด Parsing ํ•˜๋Š”๋™์•ˆ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์— JS ํŒŒ์ผ์˜ ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 1, JS ํŒŒ์ผ์ด HTML์ด Parsing ๋˜๊ธฐ ์ „์— ์‹คํ–‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ๋ฅผ๋“ค์–ด JS ํŒŒ์ผ์ด ์ฟผ๋ฆฌ ์…€๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋” ์š”์†Œ๋ฅผ ์กฐ์ž‘ํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค๋ฉด ์กฐ์ž‘ํ•˜๋ ค๋Š” ์‹œ์ ์— ํŒŒ์‹ฑํ•˜์ง€ ๋ชปํ•œ HTML์— ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์–ด ์ •์˜ ๋˜์–ด์•Š์€ ์š”์†Œ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 2, ์—ฌ์ „ํžˆ HTML์„ Parsingํ•˜๋Š” ๋„์ค‘์— JS ํŒŒ์ผ Feching์ด ์™„๋ฃŒ๋˜๋ฉด JS ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ page๋ฅผ ๋ณด๋Š”๋ฐ ๋‹ค์†Œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.

โ–ท 4. defer ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง„ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ—ค๋” ํƒœ๊ทธ์— ํฌํ•จ

  • defer ์—ญ์‹œ ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž… ์†์„ฑ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ TRUE๋กœ ์„ค์ •๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ๋‹ค์šด๋ฐ›์•„ Parsingํ•˜๋‹ค๊ฐ€ defer ์†์„ฑ ๊ฐ’์„ ์ง€๋‹Œ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋ณ‘๋ ฌ๋กœ JS ํŒŒ์ผ์„ Fechingํ•˜๋ผ๋Š” ๋ช…๋ น๋งŒ ํ•˜๊ณ  HTML์„ ๋๊นŒ์ง€ Parsingํ•˜๊ณ  HTML์ด Parsing ๋๋‚˜๋Š” ์ˆœ๊ฐ„ Feching ๋œ JS ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์žฅ์ , defer์€ HTML์„ Parsingํ•˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ JS ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•œ ๋’ค ๋งˆ์ง€๋ง‰์— ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ์˜ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.
    => Defer์ด ๊ฐ€์žฅ ์ข‹์€ ์˜ต์…˜์œผ๋กœ HTML์„ Parsingํ•˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ JS ํŒŒ์ผ์„ '๋ชจ๋‘' Fechingํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ Parsing์„ ๋จผ์ €ํ•ด์„œ HTML ํŽ˜์ด์ง€๋ฅผ ์ฆ‰์‹œ ๋ณด์—ฌ์ค€ ๋’ค ๋ฐ”๋กœ ์ด์–ด์„œ JS ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

- async์™€ defer ๋น„๊ต

  • async ์˜ต์…˜์œผ๋กœ ๋‹ค์ˆ˜์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋จผ์ € ๋‹ค์šด๋กœ๋“œํ•œ JS ํŒŒ์ผ ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
    => ์ฆ‰ ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์ˆœ์„œ์—๋Š” ์ƒ๊ด€์—†์ด ๋‹ค์šด๋กœ๋“œ ๋œ JS ํŒŒ์ผ ์ˆœ์œผ๋กœ ์‹คํ–‰์ด ๋œ๋‹ค.

  • defer๋Š” ์˜ต์…˜์€ HTML์„ Parsingํ•˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ JS ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰์ด ๋œ๋‹ค.
    => ์ฆ‰, JS ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œ ํ•œ ํ›„ ๋‹ค์Œ์— ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์ˆœ์„œ์— JS ํŒŒ์ผ์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

- async์™€ defer ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ 

  • async์™€ defer๋Š” ๋ชจ๋‘ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ณ‘๋ ฌ์ ์œผ๋กœ HTML Pasing๊ณผ ๋™์‹œ์— JS ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค.
  • async๋Š” Pasing๊ณผ ๋™์‹œ์— ๋ณ‘๋ ฌ์ ์œผ๋กœ JS ํŒŒ์ผ๋“ค์„ ํŒจ์นญํ•˜๋ฉฐ ๋จผ์ € ํŒจ์นญ๋œ ์ˆœ์„œ๋Œ€๋กœ JS ํŒŒ์ผ์ด ์‹คํ–‰๋˜์–ด์„œ ์‹คํ–‰๋Š” ์ˆœ์„œ๊ฐ€ ๋ณด์žฅโŒ
  • defer๋Š” Pasing๊ณผ ๋™์‹œ์— ๋ณ‘๋ ฌ์ ์œผ๋กœ JS ํŒŒ์ผ์„ ๋ชจ๋‘ ํŒจ์นญํ•œ ๋’ค HTML Pasing์„ ๋ชจ๋‘ ๋งˆ์นœ ๋’ค์— ์ •์˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ JS ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ
    ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅโญ•

*๐Ÿ’กconclusion

  • ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ๊ฐ์˜ ์Šคํฌ๋ฆฝํŠธ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ Parsing๋˜์–ด๋„ ์ƒ๊ด€์—†๋‹ค๋ฉด, async ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ž.
  • ๋‹จ, ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆœ์„œ์— ์˜์กด์ ์ด์–ด์„œ ์ •์˜ํ•œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด async ์˜ต์…˜์€ ์ง€์–‘ํ•˜์ž
  • ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ๊ฐ์˜ ์Šคํฌ๋ฆฝํŠธ์— ์˜์กดํ•˜์—ฌ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŒŒ์‹ฑ๋˜๊ณ  ์‹คํ–‰๋˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋ฉด, defer ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ž.
  • ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ๊ฐ์˜ script ํƒœ๊ทธ๋“ค์ด ์ •์˜ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋˜์–ด์•ผ๋งŒ ํ•œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด defer ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ž.
profile
์ž๊ธฐ ์‹ ๋ขฐ์˜ ํž˜์„ ๋ฏฟ๊ณ  ์‹ค์ฒœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.

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