๐Ÿ“– TIL - Script ๋กœ๋”ฉ ์ „๋žต: defer์™€ async ๋น„๊ต

์Š˜ยท2025๋…„ 1์›” 18์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
29/89

๐ŸŒŸ ๋“ค์–ด๊ฐ€๋ฉฐ

๋ฐ”๋‹๋ผJS ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๊ณ .. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค,
main.js script๋ฅผ body ํƒœ๊ทธ ๋์ง€์ ์˜ ๋ฐ”๋กœ ์œ„์ชฝ์— ์ ์–ด์ฃผ์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์— ์˜๋ฌธ์„ ๊ฐ€์ง€์‹œ๋‹ค. defer๋ฅผ ๋ณด๊ณค

์•„, defer์„ ๋Œ€์‹  ์ถ”๊ฐ€ํ•ด์ฃผ์…จ๊ตฐ์š”!

๋ผ๊ณ  ํ•˜์…จ์—ˆ๋‹ค. ์‚ฌ์‹ค ๋ถ€๋„๋Ÿฝ์ง€๋งŒ.. ๋ฌด์˜์‹์ ์œผ๋กœ scriptํƒœ๊ทธ์— defer๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ๋„.. ์ด ์•„์ด๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๊ณ  ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ ์žˆ๋Š”์ง€.. ๊ณต๋ถ€๋„ ํ•˜์ง€ ์•Š์€์ฑ„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด์˜€๋‹ค.
์‚ฌ์‹ค ํ”„๋ ˆ์ž„์›Œํฌ์— ์ต์ˆ™ํ•ด์ง€๊ณ  ๋ฒˆ๋“ค๋Ÿฌ(webpack, vite..)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ƒ๋žตํ•ด๋ฒ„๋ฆฐ๊ฑธ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค...๐Ÿ˜“
ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ข…์ข… ๋‚ด๋ถ€์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ์˜ ๋กœ๋”ฉ์ˆœ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋‹ˆ๊นŒ....
scriptํƒœ๊ทธ๋Š” ๋กœ๋”ฉ๋˜๊ธฐ์ „, ๊ทธ๋‹ˆ๊นŒ DOM ๋ Œ๋”๋ง ์ƒ์„ฑ์„ ๋ฉˆ์ถ”๊ณ  script๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์ด๋•Œ DOM ์ƒ์„ฑ์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋™์‹œ์— ๋‚ด๋ ค๋ฐ›๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ defer์ด๋‹ค.
์›น ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”์—์„œ JavaScript ํŒŒ์ผ์˜ ๋กœ๋”ฉ ์ „๋žต์€ ๋งค์šฐ ์ค‘์š”ํ•œ๋ฐ, defer ์ด์™ธ์—๋„ async ์†์„ฑ์€ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ๋ฐฉ์‹์„ ์ œ์–ดํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ด๊ธฐ์— ๊ฐœ๋…์„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ“ ๊ธฐ๋ณธ ๊ฐœ๋…


์ข‹์€ ์ด๋ฏธ์ง€ ์ž๋ฃŒ๋ฅผ ์ฐพ์•—๋‹ค..!

์ผ๋ฐ˜์ ์ธ Script ๋กœ๋”ฉ

<script src="script.js"></script>
  • HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋จ
  • ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹คํ–‰์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ์ฐจ๋‹จ๋จ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋นˆ ํ™”๋ฉด์„ ๋ณด๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ

defer ์†์„ฑ

<script defer src="script.js"></script>
  • HTML ํŒŒ์‹ฑ๊ณผ ๋ณ‘๋ ฌ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ
  • HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ํ›„ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  • DOM ์™„์„ฑ์„ ๋ณด์žฅํ•˜๋ฉฐ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋จ
  • DOMContentLoaded ์ด๋ฒคํŠธ ์ด์ „์— ์‹คํ–‰

async ์†์„ฑ

<script async src="script.js"></script>
  • HTML ํŒŒ์‹ฑ๊ณผ ๋ณ‘๋ ฌ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ
  • ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ ์ฆ‰์‹œ ์‹คํ–‰ (HTML ํŒŒ์‹ฑ ์ค‘๋‹จ)
  • ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
  • ๋…๋ฆฝ์ ์ธ ์Šคํฌ๋ฆฝํŠธ์— ์ ํ•ฉ

๐Ÿ”„ ๋™์ž‘ ๋ฐฉ์‹ ๋น„๊ต

์ผ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ

  1. HTML ํŒŒ์‹ฑ ์‹œ์ž‘
  2. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋งŒ๋‚จ
  3. ํŒŒ์‹ฑ ์ค‘๋‹จ
  4. ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ
  5. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  6. ๋‚จ์€ HTML ํŒŒ์‹ฑ

defer ์Šคํฌ๋ฆฝํŠธ

  1. HTML ํŒŒ์‹ฑ ์‹œ์ž‘
  2. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋งŒ๋‚จ
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ
  4. HTML ํŒŒ์‹ฑ ๊ณ„์†
  5. HTML ํŒŒ์‹ฑ ์™„๋ฃŒ
  6. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

async ์Šคํฌ๋ฆฝํŠธ

  1. HTML ํŒŒ์‹ฑ ์‹œ์ž‘
  2. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋งŒ๋‚จ
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ
  4. HTML ํŒŒ์‹ฑ ๊ณ„์†
  5. ์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ ์‹œ ํŒŒ์‹ฑ ์ค‘๋‹จ
  6. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  7. ๋‚จ์€ HTML ํŒŒ์‹ฑ

๐ŸŽฏ ์‚ฌ์šฉ ์ผ€์ด์Šค

defer ์‚ฌ์šฉ ์‹œ๊ธฐ

  • DOM ์กฐ์ž‘์ด ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ
  • ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ
  • ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ
  • jQuery์™€ ๊ฐ™์€ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
<script defer src="jquery.js"></script>
<script defer src="app.js"></script>

async ์‚ฌ์šฉ ์‹œ๊ธฐ

  • ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์˜ ์Šคํฌ๋ฆฝํŠธ
  • ๋ถ„์„ ๋„๊ตฌ (Google Analytics)
  • ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ
  • ์œ„์ ฏ ์Šคํฌ๋ฆฝํŠธ
<script async src="analytics.js"></script>
<script async src="ads.js"></script>

โš–๏ธ ์žฅ๋‹จ์  ๋น„๊ต

defer

์žฅ์ :

  • DOM ์™„์„ฑ ๋ณด์žฅ
  • ์‹คํ–‰ ์ˆœ์„œ ๋ณด์žฅ
  • ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ตœ์ ํ™”

๋‹จ์ :

  • HTML ํŒŒ์‹ฑ ์™„๋ฃŒ๊นŒ์ง€ ์‹คํ–‰ ๋Œ€๊ธฐ
  • ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

async

์žฅ์ :

  • ๋น ๋ฅธ ๋กœ๋”ฉ๊ณผ ์‹คํ–‰
  • ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ–ฅ ๋ฐ›์ง€ ์•Š์Œ
  • ๋…๋ฆฝ์ ์ธ ์Šคํฌ๋ฆฝํŠธ์— ์ด์ƒ์ 

๋‹จ์ :

  • ์‹คํ–‰ ์ˆœ์„œ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ
  • DOM ์™„์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
  • ์‹คํ–‰ ์‹œ์  ์˜ˆ์ธก ์–ด๋ ค์›€

๐ŸŽจ ์‹œ๊ฐ์  ๋น„๊ต

์ผ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ:
HTML ํŒŒ์‹ฑ ----[์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ/์‹คํ–‰]---- HTML ํŒŒ์‹ฑ

defer:
HTML ํŒŒ์‹ฑ --------------------------------|
์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ -------------[์‹คํ–‰]

async:
HTML ํŒŒ์‹ฑ -------[์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰]-------
์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ --[์‹คํ–‰]

๐Ÿ“Œ ๊ฒฐ๋ก 

  • defer๋Š” ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์ ํ•ฉ
  • async๋Š” ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์˜ ์Šคํฌ๋ฆฝํŠธ์— ์ ํ•ฉ
  • ํŽ˜์ด์ง€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ ์ ˆํ•œ ์†์„ฑ ์„ ํƒ์ด ์ค‘์š”
profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

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