[JS] Async, defer attributes
- 👍 Scripts: async, defer @ JavaScript.info
- 圖片來源:async vs defer attributes @ Growing with the web
TL;DR
defer
會讓 scripts 的檔案先開始被下載,但在 HTML 文件準備好後才開始執行,同時會確保各個 script 檔案執行的順序async
會讓 scripts 的檔案先開始被下載,但它不會確保各個 script 檔案被執行的順序,先下載好的就先執行
在 HTML 中載入 JS 三種常用的方式
只使用 script
<!-- https://javascript.info/script-async-defer -->
<p>...content before script...</p>
<script src="demo.js"></script>
<!-- 當 JS 還沒下載與解析完前,HTML 的繪製會卡在這,因此需等到 script 載入完後,才會看到下面的內容 -->
<p>...content after script...</p>
執行到這段程式碼時,整個網頁的繪製會停下,等 demo.js
下載完並執行完後,網頁繪製才繼續。
defer
<script src="demo1.js" defer></script>
<script src="demo2.js" defer></script>