無阻塞加載腳本分析[全]
很顯然,腳本必須按順序執(zhí)行,但沒有必要按順序下載,解決方法:
1。內(nèi)嵌JS
通常由于頁面大小和緩存能帶來更多好處,因此外部文件引入JS更好一些;
在少數(shù)情況下,比如首頁、少量JS情況下尚可接受。
2。XHR Eval
通過XMLHttpRequest從服務器端獲取腳本。
主要缺陷是,通過XHR獲取的腳本必須部署在和主頁面相同的域中。
Ajax.get("test.js", function (xhr) {
eval(xhr.responseText);
});
3。XHR注入
使用XHR獲取腳本并創(chuàng)建script標簽。
同樣,通過XHR獲取的腳本必須部署在和主頁面相同的域中。
Ajax.get('test.js', function (xhr) {
injectscript(xhr.responseText);
});
function injectscript(scriptText) {
var s = document.createElement('script');
s.text = scriptText;
document.getElementsByTagName('head')[0].appendChild(s);
}
4。Script in Iframe
將需要的腳本放入到一個頁面中,然后通過iframe來加載該頁面。
缺點是iframe本身的開銷比較大,另外瀏覽器安全機制不允許iframe中的js訪問跨域的父頁面,反之亦然。
5。Script DOM Element
JS動態(tài)創(chuàng)建script DOM元素并設置其src屬性。
var scriptElem = document.createElement('script');
scriptElem.src = 'http://domain.com/test.js';
document.ge('head')[0].appendChild(scriptElem);
6。Script Defer
給script標簽添加defer屬性。
缺點是只有IE和一些新瀏覽器支持。
<script defer src='test.js'></script>
7。document.write Script Tag
使用document.write把HTML標簽script寫入頁面。
缺點是只有在IE中是并行加載腳本的。
document.write("<script type='text/javascript' src='test.js'><\/script>");
有一個大家不曾廣泛討論的不同點是對于瀏覽器忙碌狀態(tài)的影響,包括瀏覽器的狀態(tài)欄、進度條、Tab圖標以及鼠標。
當你加載多個彼此間有依賴關(guān)系的腳本時,還需要一種能夠保證執(zhí)行順序的技術(shù)。
技術(shù)
|
并行下載
|
可以跨域
|
存在Script標簽
|
忙碌指示 |
順序保證 |
大小 (bytes) |
XHR Eval |
IE, FF, Saf, Chr, Op |
no |
no |
Saf, Chr |
- |
~500 |
XHR Injection |
IE, FF, Saf, Chr, Op |
no |
yes |
Saf, Chr |
- |
~500 |
Script in Iframe |
IE, FF, Saf, Chr, Op |
no |
no |
IE, FF, Saf, Chr |
- |
~50 |
Script DOM Element |
IE, FF, Saf, Chr, Op |
yes |
yes |
FF, Saf, Chr |
FF, Op |
~200 |
Script Defer |
IE, Saf4, Chr2, FF3.1 |
yes |
yes |
IE, FF, Saf, Chr, Op |
IE, FF, Saf, Chr, Op |
~50 |
document.write Script Tag |
IE, Saf4, Chr2, Op |
yes |
yes |
IE, FF, Saf, Chr, Op |
IE, FF, Saf, Chr, Op |
~100 |
目前異步加載時保持執(zhí)行順序的方法有下面幾種,由于篇幅原因,暫不詳細描述。
單個腳本
1、Hardcoded Callback
2、Window Onload
3、Timer
4、Script Onload
5、Degrading Script Tags
多個腳本
1、Managed XHR
2、DOM Element and Doc Write
本文參考《高性能網(wǎng)站建設進階指南》
相關(guān)文章
javascript suggest效果 自動完成實現(xiàn)代碼分享
像百度與google,當我們往搜索框輸入東西時就會出現(xiàn)一排列表提示用戶有什么熱門或適合的候選詞,這種效果就叫suggest。本文將一步步教你如何設計它2012-02-02JavaScript數(shù)據(jù)結(jié)構(gòu)之數(shù)組的表示方法示例
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之數(shù)組的表示方法,從數(shù)據(jù)結(jié)構(gòu)線性表的角度分析了數(shù)組的原理并結(jié)合實例形式分析了javascript數(shù)組的定義與使用方法,需要的朋友可以參考下2017-04-04詳解BootStrap表單驗證中重置BootStrap-select驗證提示不清除的坑
這篇文章主要介紹了詳解BootStrap表單驗證中重置BootStrap-select驗證提示不清除的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09微信小程序開發(fā)之選項卡(窗口底部TabBar)頁面切換
本文主要介紹了微信小程序開發(fā)之選項卡(窗口底部TabBar)頁面切換的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04