1. 程式人生 > >JavaScript 指令碼下載解釋執行阻塞頁面優化

JavaScript 指令碼下載解釋執行阻塞頁面優化

優化原因:在前端頁面載入過程中,JavaScript程式碼的下載、解釋和執行會阻塞頁面的其他執行(此時頁面會一片空白),瀏覽器在遇到<body>標籤才開始呈現內容。

優化建議:

1、把JavaScript引用放在<body>元素中內容的後面:

<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
</head>
<body>
<!-- 這裡放內容 -->
<script type="text/javascript" src="example1.js"></script>
<script type="text/javascript" src="example2.js"></script>
</body>
</html>

2、使用defer屬性(只適合引用外部指令碼檔案,不能保證按順序執行指令碼,建議只有一個指令碼引用使用defer屬性),延遲指令碼,js指令碼會被延遲到整個頁面都解釋完畢後(瀏覽器遇到</html>標籤後)再執行:
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script type="text/javascript" defer="defer" src="example1.js"></script>
<script type="text/javascript" defer="defer" src="example2.js"></script>
</head>
<body>
<!-- 這裡放內容 -->
</body>
</html>

3、使用async屬性(只適合引用外部指令碼檔案,不能保證按順序執行指令碼,請確保指令碼之間不含依賴),非同步指令碼,非同步指令碼一定會在頁面的load事件前執行:

<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script type="text/javascript" async src="example1.js"></script>
<script type="text/javascript" async src="example2.js"></script>
</head>
<body>
<!-- 這裡放內容 -->
</body>
</html>

注意:使用defer屬性引入的指令碼會比使用async屬性引入的指令碼先執行。