Javascript無阻塞載入具體方式

來源:互聯網
上載者:User

看了《高效能JavaScript》的讀書筆記

幾個原則:

1、將指令碼放在底部

<link>還是在head中,用以保證在js載入前,能載入出正常顯示的頁面。

<script>放在</body>前。

2、成組指令碼

由於每個<script>標籤下載時阻塞頁面解析過程,所以限制頁面的<script>總數也可以改善效能。適用於內聯指令碼和外部指令碼。

3、非阻塞指令碼

等頁面完成載入後,再載入js代碼。也就是,在window.load事件發出後開始下載代碼。

(1)defer屬性:支援IE4和fierfox3.5更高版本瀏覽器

<script defer>...</script>

內聯和外部檔案

帶defer屬性的<script>可出現在文檔的任何位置,對應的js檔案將在<script>被解析時啟動下載,但代碼不會執行,直到DOM載入完畢(在onload事件控制代碼被調用之前)。所以實現了和也賣弄其他資源一起並行下載。

(2)動態指令碼元素

文件物件模型(DOM)允許你使用js動態建立HTML的幾乎全部文檔內容。

複製代碼 代碼如下:var script=document.createElement("script");

script.type="text/javascript";

script.src="file.js";

document.getElementByTagName_r("head")[0].appendChild(script);

此技術的重點在於:無論在何處啟動下載,檔案額下載和運行都不會阻塞其他頁面處理過程。即使在head裡(除了用於下載檔案的http連結)。

(3)The YUI3 approach

理念:用一個很小的初始代碼,下載其餘的功能代碼,先引入檔案:

複製代碼 代碼如下:<script type="text/javascript src=http://files.jb51.net/file_images/article/201306/yuanma/combo.js></script>

此種子檔案大約10KB,

使用:

複製代碼 代碼如下:YUI().use("dom",function(Y){

  Y.Dom.addclass(...)

})

當所有代碼可用時,回呼函數被調用,YUI執行個體作為參數傳入,就可以立即使用新下載的功能。

The LazyLoad library

使用:先引入:lazyload-min.js

(4)

複製代碼 代碼如下:LazyLoad.js("a.js",function(){

Appliction.init();

})

多個檔案:複製代碼 代碼如下:LazyLoad.js(["a.js","b.js"],function(){

Application.init();

})

(5)The LABjs library

先引入:lab.js

複製代碼 代碼如下:$LAB.script("a.js").wait(function(){

Application.init();

})

多個檔案,就鏈式寫法

他的獨特之處在於能夠管理依賴關係。

可以通過wait()函數指定哪些檔案應該等待其他檔案。

例如:b.js的代碼保證不在a.js之前運行

複製代碼 代碼如下:$LAB.script("a.js").wait().script("b.js").wait(function(){

Application.init();

})

這樣,雖然兩個檔案是並行下載的,卻能保證a.js能在b.js之前執行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.