日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

頁面無阻塞加載研究

 CevenCheng 2012-05-24


在頁面加載性能當(dāng)中,頁面被阻塞是影響頁面主要內(nèi)容(包括圖片等)及時呈現(xiàn)在用戶面前的一個重要因素之一,所以我們需要在頁面中合理處置外調(diào)CSS及JS文件。
來看一段代碼

   提示:你可以先修改部分代碼再運(yùn)行。

有firebug的童鞋可以看到,頁面內(nèi)容及圖片等被head里面的外調(diào)script及css文件所阻塞,頁面加載耗時5.5S,如下圖

樣式表下面如果有script標(biāo)簽則同樣會阻塞后續(xù)頁面內(nèi)容的加載,但我們通常希望優(yōu)先加載樣式表,這樣才不會看到裸奔的頁面,所以我們只須關(guān)注script的無阻塞加載即可。

看下面這一段js

[隱藏代碼]
function loadScript(url, callback) {
       
//創(chuàng)建script
       
var script = document.createElement("script");
        script
.type = "text/javascript";
        script
.src = url;
        document
.getElementsByTagName("head")[0].appendChild(script);
       
//加載完畢回調(diào)
       
if(script.readyState) { //for IE
                script
.onreadystatechange = function() {
                       
if(script.readyState == "loaded" || script.readyState == "complete") {
                                script
.onreadystatechange = null; //此處銷毀事件引用,防止IE下事件駐留內(nèi)存
                               
if(callback){callback();}
                       
}
               
};
       
} else { //for Others
                script
.onload = function() {
                       
if(callback){callback();}
               
};
       
}
}

以上代碼可以看出,我們是用一個js動態(tài)創(chuàng)建一個script標(biāo)簽,然后賦值src來進(jìn)行加載外部JS,同時提供一個回調(diào)函數(shù),以保證在腳本加載完畢才執(zhí)行的那些函數(shù)代碼可以正常運(yùn)行。

再看一下優(yōu)化后的頁面

   提示:你可以先修改部分代碼再運(yùn)行。

再次用firebug可以看到圖片已經(jīng)沒有被腳本阻塞,與腳本是并行加載的,整個頁面加載時間也減少不少,頁面總耗時減少為2.9S,如下圖

但還是有問題,在loadScript與頁面內(nèi)容之間如果還有script標(biāo)簽的話,一樣會阻塞內(nèi)容下載,解決方案就是給loadScript加個setTimeout執(zhí)行,徹底將加載JS移出文檔加載流,實(shí)現(xiàn)異步加載,就不會再阻塞頁面其他內(nèi)容了,看如下完整代碼:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多