defer 與 async
defer
- HTML4.01定義的
- 只適用於外部腳本(IE4~7會支持內嵌腳本的defer屬性)
- 告訴瀏覽器當即下載,延遲執行,腳本會延遲到整個頁面所有解析完畢以後才運行
- HTML5規範要求腳本按照他們出現的前後順序執行,第一個延遲腳本先於第二個延遲腳本執行,這兩個腳本會先於DOMContentLoaded事件執行,而在現實瀏覽器中,延遲腳本不必定會按照順序執行,也不必定在DOMContentLoaded事件觸發前執行,所以最好只包含一個延遲腳本。
async
- HTML5定義的
- 只適用於外部腳本
- 與defer不一樣的是,標記爲async的腳本不保證按照指定他們的先手順序執行,所以確保多個腳本之間互不依賴很是重要,指定async屬性的目的是不讓頁面等待兩個腳本下載和執行,從而異步加載頁面其餘內容。爲此,建議腳本不要在加載期間修改DOM。
- 指定了async屬性的腳本必定會在頁面的load事件前執行,但可能會在DOMContentLoaded事件觸發以前或以後執行
歡迎關注本站公眾號,獲取更多信息