async和defer的作用是什么?有什么區(qū)別

一般來說為了防止頁面白屏,script標簽會放到body標簽的最后面也就是之前。如果把script標簽放在head標簽里而且沒有 defer 或 async,瀏覽器會立即加載并執(zhí)行指定的腳本,“立即”指的是在渲染該script標簽之下的文檔元素之前,也就是說不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行,這樣就會阻塞后續(xù)的文檔解析。

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

沒有 defer 或 async,瀏覽器會立即加載并執(zhí)行指定的腳本,“立即”指的是在渲染該 script 標簽之下的文檔元素之前,也就是說不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行。

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

有 async,加載和渲染后續(xù)文檔元素的過程將和 script.js 的加載與執(zhí)行并行進行(異步)。

<script defer src="script.js"></script>?

有 defer,加載后續(xù)文檔元素的過程將和 script.js 的加載并行進行(異步),但 script.js 的執(zhí)行要在所有元素解析完成之后,DOMContentLoaded 事件觸發(fā)之前完成。

defer:腳本延遲到文檔解析和顯示后執(zhí)行,有順序;

async:不保證順序;






最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容