為什么要有async和defer
在html中加載腳本我們通常這么寫
<script src="script.js"></script>
瀏覽器加載效果
這樣寫瀏覽器會立即加載并執行指定的腳本,缺點就是會阻塞html的加載來加載腳本,如果腳本很多的話,頁面空白時間比較長,體驗就很差。
所以我們需要想辦法能不能避免這個情況,就有了async和defer。
概念
async
和defer
都是script標簽的屬性。
帶async
<script async src="script.js"></script>
瀏覽器會將HTML和腳本并行執行(異步)
帶defer
<script defer src="myscript.js"></script>
腳本和HTML并行執行,但在HTML整個解析結束后才會去執行腳本
defer.png
在實際使用過程中我們都會將腳本標簽放在</script>
之前,來保證其他元素的優先加載。
區別
1. 下載都是和HTML同步的。
2. async在下載完后就執行,defer在HTML解析完后再執行。
3. defer是按照加載順序來執行腳本。
4. async不管聲明的順序,加載完就執行。
建議
在使用過程中要加載多個腳本文件的話,建議根據依賴關系來整理腳本的聲明順序。
參考