閱讀筆記一 ---關於腳本放的位置以及加載方式

剛開始進行代碼優化的時候,最弄不懂的就是腳本應該放在哪裏,應該用什麼樣的方式加載。
1:將腳本放在底部
     HTML4規範中指出<script>標籤可以放在HTML文檔的<head>或者<body>中

<!DOCTYPE html>
<html>
<head lang="en"><pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>
    <script type="text/javascript" src="file1.js" ></script>
    <script type="text/javascript" src="file2.js" ></script>
    <script type="text/javascript" src="file3.js" ></script>
    <script type="text/javascript" src="file4.js" ></script>
    <script rel="stylesheet" type="text/css" href="style.css" ></script>
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
</body>
</html>


      但是這樣子就存在一個很嚴重的問題,在<head>中加載了四個Javascript文件。由於腳本會阻塞渲染,直到它們全部下載並執行完之後,頁面渲染纔會繼續,因此,頁面的性能問題會很明顯。把腳本放在頂部會產生明顯的延遲,通常表現爲顯示空白頁面,用戶無法瀏覽內容,將文檔放在頁面頂部會產生明顯的延遲,也無法與頁面進行交互,這個對於web開發來說,嚴重影響了用戶體驗。由於腳本會阻塞頁面其他資源的的下載,因此推薦獎所有的<script>標籤儘可能的放在<body>標籤的地步,以儘量減少對整個頁面下載的影響。
<pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
<!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>

    <link rel="stylesheet" type="text/css" href="style.css" >
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
 <script type="text/javascript" src="file1.js" ></script>
 <script type="text/javascript" src="file2.js" ></script>
 <script type="text/javascript" src="file3.js" ></script>
 <script type="text/javascript" src="file4.js" ></script>  
</body>
</html>



2:減少頁面包含的<script>標籤的數量   用一個javascript標籤加載多個文件
<!DOCTYPE html>
<html>
<head lang="en">
<!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>

    <link rel="stylesheet" type="text/css" href="style.css" >
    <script type="text/javascript">
        });
    </script>
</head>
<body>
 <p>hello world</p>
 <script type="text/javascript" src="file1.js & file2.js & file3.js & file4.js" ></script> 
</body>
</html>

3:使用延遲腳本 defer
 帶defer屬性的標籤可以放在文檔中的任何位置。對應的JavaScript文件將在頁面解析到<script>標籤時開始下載,但是並不會執行,知道Dom加載完成(onload事件被處罰前)。
<pre name="code" class="html"><!DOCTYPE html>
<html>
<head lang="en">
    <meta http-equiv="Content-Type" charset="UTF-8">
    <title>test</title>
    <script defer>
        alert("defer");
    </script>
    <script >
        alert("simple");
    </script>
    <script type="text/javascript">
        window.onload = function(){
            alert("load");
        };
    </script>
</head>
<body>
 <p>hello world</p>
</body>
</html>
但這個只有在ie4+和FireFox3.5+的瀏覽器才支持,因此這個不是一個理想的跨瀏覽器解決方案。
在支持defer的瀏覽器中執行順式:simple、load、defer。在不支持defer的瀏覽器下面執行順式爲:defer、simple、load。
4:動態腳本加載

動態腳本加載時最通用的無阻塞加載解決方案,實現方式有多中,後續會進行詳細說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章