πŸ“Œ <script async> μ„€λͺ…

<script async>λŠ” λΉ„λ™κΈ°μ μœΌλ‘œ(JavaScript νŒŒμΌμ„ λ³‘λ ¬λ‘œ λ‹€μš΄λ‘œλ“œν•˜λ©΄μ„œ) μ‹€ν–‰λ˜λ„λ‘ ν•˜λŠ” HTML μ†μ„±μž…λ‹ˆλ‹€.


1️⃣ κΈ°λ³Έ μ‚¬μš©λ²•

<script async src="script.js"></script>

2️⃣ μž‘λ™ 방식

  1. λΈŒλΌμš°μ €κ°€ HTML을 μ½μœΌλ©΄μ„œ <script async>λ₯Ό λ§Œλ‚˜λ©΄ 슀크립트λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” λ™μ‹œμ— HTML을 계속 νŒŒμ‹±ν•©λ‹ˆλ‹€.
  2. λ‹€μš΄λ‘œλ“œκ°€ λλ‚˜λŠ” μ¦‰μ‹œ HTML νŒŒμ‹±μ„ μž μ‹œ λ©ˆμΆ”κ³  슀크립트λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  3. 이후 λ‹€μ‹œ HTML νŒŒμ‹±μ„ μ΄μ–΄κ°‘λ‹ˆλ‹€.

3️⃣ 동기 vs 비동기 vs μ§€μ—° μ‹€ν–‰ (async vs defer)

속성 μ—†μŒ async defer
HTML νŒŒμ‹± 쀑 λ‹€μš΄λ‘œλ“œ ν›„ μ‹€ν–‰ HTMLκ³Ό 병렬 λ‹€μš΄λ‘œλ“œ ν›„ μ¦‰μ‹œ μ‹€ν–‰ HTMLκ³Ό 병렬 λ‹€μš΄λ‘œλ“œ ν›„, HTML νŒŒμ‹±μ΄ λλ‚œ ν›„ μ‹€ν–‰
μ‹€ν–‰ μˆœμ„œ 보μž₯됨 μ‹€ν–‰ μˆœμ„œ 보μž₯ μ•ˆ 됨 μ‹€ν–‰ μˆœμ„œ 보μž₯됨
크리티컬 슀크립트 (ν•„μˆ˜ κΈ°λŠ₯) μ‚¬μš© 독립적인 κΈ°λŠ₯ (κ΄‘κ³ , 뢄석 λ“±) DOM μ‘°μž‘ν•˜λŠ” 슀크립트 μ‚¬μš©

βœ… asyncλŠ” κ΄‘κ³ , 뢄석, μ†Œμ…œ λ―Έλ””μ–΄ μœ„μ ― λ“± 독립적인 κΈ°λŠ₯을 μ‹€ν–‰ν•˜λŠ” 데 적합
βœ… deferλŠ” DOM μ‘°μž‘μ΄ ν•„μš”ν•œ 슀크립트(예: jQuery, UI κ΄€λ ¨ 슀크립트)μ—μ„œ μ‚¬μš©ν•˜κΈ° μ’‹μŒ


4️⃣ 예제 비ꡐ

<!-- μ‹€ν–‰ μˆœμ„œ: 1 -> 2 (μˆœμ„œ 보μž₯됨) -->
<script src="script1.js"></script>
<script src="script2.js"></script>

<!-- μ‹€ν–‰ μˆœμ„œ 보μž₯λ˜μ§€ μ•ŠμŒ (비동기 μ‹€ν–‰) -->
<script async src="script1.js"></script>
<script async src="script2.js"></script>

<!-- μ‹€ν–‰ μˆœμ„œ 보μž₯됨 (HTML νŒŒμ‹± ν›„ μ‹€ν–‰) -->
<script defer src="script1.js"></script>
<script defer src="script2.js"></script>

🎯 κ²°λ‘