script標籤中defer和async的區別(稀土掘金學習)
阿新 • • 發佈:2022-03-25
如果沒有defer或async屬性,瀏覽器會立即載入並執行相應的指令碼。它不會等待後續載入的文件元素,讀取到就會開始載入和執行,這樣就阻塞了後續文件的載入。
下圖可以直觀的看出三者之間的區別:
其中藍色代表js指令碼網路載入時間,紅色代表js指令碼執行時間,綠色代表html解析。
defer 和 async屬性都是去非同步載入外部的JS指令碼檔案,它們都不會阻塞頁面的解析,其區別如下:
- 執行順序: 多個帶async屬性的標籤,不能保證載入的順序;多個帶defer屬性的標籤,按照載入順序執行;
-
指令碼是否並行執行:async屬性,表示後續文件的載入和執行與js指令碼的載入和執行是並行進行的