๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JavaScript

[JS] JavaScript - async์™€ defer ์ฐจ์ด

by vividmin 2022. 2. 2.
320x100

 

Web APIs
  • API
    • Application Programming Interfacer ์˜ ์•ฝ์ž
    • ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐ ๊ทœ์น™์˜ ์ง‘ํ•ฉ
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ฑ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ๊ธฐ๋Šฅ๋“ค, ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ ์ƒ์— ์žˆ๋Š” ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ํ•˜๋“œ ์›จ์–ด, ๋˜๋Š” ์„œ๋“œํŒŒํ‹ฐ ์›น์‚ฌ์ดํŠธ๋‚˜ ์„œ๋น„์Šค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธ
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉ๋ฒ•๋งŒ ์•Œ๋ฉด ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
  • console.log(' hello world'); ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ WebAPI๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

js ํŒŒ์ผ์˜ ๊ธฐ๋ณธ์ ์ธ ์œ„์น˜

HTML์—์„œ javaScript๋ฅผ ํฌํ•จํ•  ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋“ค

  1. js ํŒŒ์ผ์˜ headํƒœ๊ทธ ์•ˆ์— ์œ„์น˜ ์‹œ์ผฐ์„ ๋•Œ
    • ์ˆœ์„œ : parsing HTML fetching js excuting js parsing HTML : ํŽ˜์ด์ง€ ์ค€๋น„ ๋
      • parsing : HTMLํŒŒ์ผ์„ ํ•œ ์ค„ ์”ฉ ์ฝ์Œ
      • fetching : js ํŒŒ์ผ ๋‹ค์šด๋ฐ›์Œ
      • excuting : js ํŒŒ์ผ ์‹คํ–‰
    • ๋‹จ์  : ์‚ฌ์šฉ์ž๊ฐ€ jsํŒŒ์ผ์„ ๋ฐ›๋Š” ๋™์•ˆ์—๋Š” ํ™”๋ฉด์ด ์™„์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ์ˆ˜ ์žˆ์Œ No good
  2. js ํŒŒ์ผ์„ bodyํƒœ๊ทธ ๋งจ ๋์— ์œ„์น˜ ์‹œ์ผฐ์„ ๋•Œ
    • ์ˆœ์„œ : parsing HTML → fetching js → excuting js : ํŽ˜์ด์ง€ ์ค€๋น„ ๋
    • ์žฅ์  : ์‚ฌ์šฉ์ž๊ฐ€ htmlํ™”๋ฉด์„ ๋นจ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์  : ํŽ˜์ด์ง€์—์„œ js๊ฐ€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๋ฉด,
              ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋ฏธ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค. No good
  3. async์™€ defer ์‚ฌ์šฉํ•˜๊ธฐ
    • ๊ฐ script์•ˆ์— ์ถ”๊ฐ€์ ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๋‚ด์šฉ์ด ๊ธธ์–ด์„œ ๋”ฐ๋กœ ์ •๋ฆฌํ•จ

 

async vs defer
  • async
    • head์•ˆ์— script๋ฅผ ์„ ์–ธํ•˜๋˜ async์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
    • parsing HTML์„ ์‹œ์ž‘ scriptํƒœ๊ทธ ๋งŒ๋‚˜๋ฉด ๋ณ‘๋ ฌ์ ์œผ๋กœ fetching js ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋‹ค๊ฐ€ fetching ๋๋‚˜๋ฉด excuting js → parsing HTML
    •  
    • ์žฅ์  :  body๋์— ์œ„์น˜ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋œ๋‹ค.
    • ๋‹จ์ 
      • html parsing ์ „์— js excuting์ด ๋๋‚˜์„œ js์—์„œ html ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•ด์•ผ ๋œ๋‹ค๋ฉด ํŽ˜์ด์ง€๊ฐ€ ์•„์ง ์ •์˜๋˜์ง€ ์•Š์•„์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
      • js๋ฅผ ๋‹ค์šด๋ฐ›์•„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ html parsing์ด ์ค‘์ง€ ๋  ์ˆ˜ ์žˆ์–ด์„œ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ์š”๋œ๋‹ค.
      • ์ฐธ์กฐ js๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ผ๋ฉด ์ž‘์„ฑ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋‹ค์šด๋กœ๋“œ ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ž‘์„ฑ์ž์˜ ํŽ˜์ด์ง€๊ฐ€ js์ˆœ์„œ์— ์˜์กด์ ์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • defer
    • head์•ˆ์— script๋ฅผ ์„ ์–ธํ•˜๋˜ defer์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
    • parsing HTML script๋งŒ๋‚˜๋ฉด fetching js ๋ช…๋ น ํ›„ ๋™์‹œ์— parsing HTML ๊ณ„์†์ง„ํ–‰ parsing ๋๋‚˜๋ฉด jsํŒŒ์ผ excuting
    • ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ์˜ต์…˜, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ”๋กœ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ณ , js ๋ฐ”๋กœ ์‹คํ–‰๊ฐ€๋Šฅ
    • js ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋„ ํŒŒ์ผ์„ ๋‹ค ๋‹ค์šด๋ฐ›์•„ ๋‘๊ณ  HTMLํŒŒ์ผ์ด ์ค€๋น„ ๋œ ํ›„์— ์ž‘์„ฑ ์ˆœ์„œ๋Œ€๋กœ jsํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— async๊ฐ™์€ ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€