FE Interview Hub
HTML中階

請說明 <script> 的 async 與 defer 有什麼不同

AI 練習作答

背景:為何需要 async / defer?

當瀏覽器解析 HTML 遇到 <script> 時,預設會暫停 HTML 解析,等 JS 下載並執行完後才繼續,容易造成頁面載入緩慢。asyncdefer 都能讓 JS 異步下載,但執行時機不同。

三種載入方式比較

<!-- 一般(阻塞) -->
<script src="app.js"></script>

<!-- async -->
<script src="app.js" async></script>

<!-- defer -->
<script src="app.js" defer></script>

執行時機示意

一般:   HTML parsing ----[暫停]---- [下載+執行JS] ---- 繼續 HTML
async:  HTML parsing ==並行下載== [執行JS(立即)] ---- 繼續 HTML
defer:  HTML parsing ==並行下載== ---- HTML 完成 ---- [執行JS]

主要差異

屬性 下載時機 執行時機 保證執行順序
阻塞,立即下載 下載後立即執行
async 與 HTML 並行 下載完成後立即執行
defer 與 HTML 並行 HTML 解析完成後,按順序執行

使用建議

  • defer:適合大多數情況,尤其是需要操作 DOM 或依賴其他腳本的 JS
  • async:適合獨立、不依賴 DOM 或其他腳本的資源(如 Google Analytics)
  • 無屬性:避免使用,除非腳本需要立即執行且不在乎阻塞

✦ AI 模擬面試

輸入你的答案,AI 即時分析精準度與改進空間

登入後即可使用 AI 評分