国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript無阻塞加載具體方式

2019-11-20 22:36:06
字體:
來源:轉載
供稿:網友

看了《高性能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=//files.VeVB.COm/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之前執行

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广水市| 兴山县| 石台县| 宾川县| 辽宁省| 平阳县| 承德市| 马鞍山市| 台东市| 延安市| 大理市| 台前县| 金堂县| 新平| 库伦旗| 乌审旗| 新兴县| 当涂县| 井陉县| 汽车| 临夏县| 漠河县| 密云县| 平度市| 博客| 阳谷县| 拉萨市| 延川县| 弥渡县| 宜宾县| 西和县| 自治县| 靖州| 米林县| 湾仔区| 涞源县| 通山县| 隆昌县| 沽源县| 靖宇县| 邵阳县|