async班巩,加載和渲染后續(xù)文檔元素的過(guò)程將和 script.js 的加載與執(zhí)行并行進(jìn)行(異步)夕冲。
defer氮兵,加載后續(xù)文檔元素的過(guò)程將和 script.js 的加載并行進(jìn)行(異步),但 script.js 的執(zhí)行要在所有元素解析完成之后歹鱼,DOMContentLoaded 事件觸發(fā)之前完成泣栈。
async和defer都是異步讀取,但是他們兩個(gè)屬性還是有不同的地方的,async只適用于外部的腳本文件南片,并告訴瀏覽器立即下載文件掺涛,但是與defer不同的是,標(biāo)記為async的腳本并不保證按照指定他們的先后順序執(zhí)行疼进。比如:
<script async src="index1.js"></script>
<script async src="index2.js"></script>
以上的代碼中薪缆,第二個(gè)腳本文件可能會(huì)在第一個(gè)腳本文件之前執(zhí)行,因此伞广,確保兩者之間互不依賴(lài)很重要拣帽。指定async屬性的目的是不讓頁(yè)面去等待兩個(gè)腳本下載和執(zhí)行,從而去異步加載其他的內(nèi)容嚼锄。