script標簽async和defer的區別及作用
阿新 • • 發佈:2019-05-01
等待 script sync 標簽 async htm 異步執行 多個 java
作用:
1.沒有 defer 或 async,瀏覽器會立即加載並執行指定的腳本,也就是說不等待後續載入的文檔元素,讀到就加載並執行。
2.async 屬性表示異步執行引入的 JavaScript,與 defer 的區別在於,如果已經加載好,就會開始執行——無論此刻是 HTML 解析階段還是 DOMContentLoaded 觸發之後。需要註意的是,這種方式加載的 JavaScript 依然會阻塞 load 事件。換句話說,async-script 可能在 DOMContentLoaded 觸發之前或之後執行,但一定在 load 觸發之前執行。
3.defer 屬性表示延遲執行引入的 JavaScript,即這段 JavaScript 加載時 HTML 並未停止解析,這兩個過程是並行的。整個 document 解析完畢且 defer-script 也加載完成之後(這兩件事情的順序無關),會執行所有由 defer-script 加載的 JavaScript 代碼,然後觸發 DOMContentLoaded 事件。
區別
defer 與相比普通 script,有兩點區別:載入 JavaScript 文件時不阻塞 HTML 的解析,執行階段被放到 HTML 標簽解析完成之後。
在加載多個JS腳本的時候,async是無順序的加載,而defer是有順序的加載。
script標簽async和defer的區別及作用