測試環境
我們已知
我們已知如下,不知道可以到網上找幾篇相關文章,可以得出下面的結論
- 指令碼是按順序載入和執行的
- 指令碼的載入和執行會阻塞頁面解析
- defer:非同步載入,頁面解析完成後執行,保證順序,會阻止DOMContentLoaded事件
- async:非同步載入,載入後立即執行,不保證順序,會阻止Load事件
- 一個指令碼同時新增defer和async,會忽略defer
先說測試結論
只列出和上面有衝突的點
- 指令碼不是按順序載入的,是同時載入多個
- 指令碼載入會阻塞頁面解析,但指令碼執行可能和頁面解析同時進行
另外,還有一種情況,就是有的指令碼使用defer,有的使用async,這種情況的執行順序是
- 先執行不帶defer/async的指令碼
- 再執行帶defer屬性的指令碼
- 最後執行帶async屬性的指令碼
只要有defer屬性的指令碼,async屬性的指令碼總是在DOMContentLoaded事件和Load事件之間執行。
注:之所以有出入,應該是Chrome所做的優化。
測試HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="http://unpkg.com/react@16/umd/react.development.js"></script>
<script src="http://lib.sinaapp.com/js/angular.js/angular-1.2.19/angular.js"></script>
<script src="http://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
</body>
</html>
複製程式碼
測試方法
下面開始驗證我上面所說的測試結論。
測試詳細過程
略。略。略。
測試HTML有了測試方法有了,還想讓我截圖?關注我們的微博@狂刀二