[javascript] async vs defer

Yongwoo ChoΒ·2022λ…„ 2μ›” 2일
0

TIL

λͺ©λ‘ 보기
57/98
post-thumbnail
post-custom-banner

<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 κ°œλ°œμžμž…λ‹ˆλ‹€ 😎
post-custom-banner

0개의 λŒ“κΈ€