腳本安需導入(裝載)的三種模式的對比
更新時間:2007年06月24日 00:00:00 作者:
何謂安需裝載?
腳本程序一般都是下載后執(zhí)行,當腳本庫非常龐大時,一次性下載起來非常費時,傳統(tǒng)的解決方式是,按功能模塊把腳本寫在不同的文件中,頁面上手動加入 script標簽裝載指定內容,但是這有一些缺點,類庫的使用者需要知道沒個腳本之間的關系,順序要求等等,而不可能要求每個類庫使用者都對其非常熟悉,出錯的可能性很大。于是很多框架開始支持導入指令,想使用什么一個導入函數(shù)就完了,不必一堆堆的script文件,不用小心翼翼的關注著他們的依賴關系。
安需裝載的困境:
早期安需裝載(即時同步按需裝載)有一個致命的弱點,瀏覽器阻塞問題。當按需裝載某些類庫時,通常通過XMLHttpRequest同步裝載腳本文件實現(xiàn),這種情況下,在資源下載完成之前,瀏覽器將停止響應用戶事件、停止頁面重畫操作。如果網速很慢,這段時間將非常讓人討厭,就像是死機似的。
以前的解決辦法是,將常用類庫資源直接打包到框架文件中,而按需導入就成了一個宣傳的幌子,沒有太多實際的價值。
安需裝載可分如下三種模式:
l 即時同步按需裝載 (阻塞,JSI、JSVM、dojo)。
最簡單的按需裝載實現(xiàn),通過XMLHttpRequest同步裝載腳本文件實現(xiàn)。問題是,瀏覽器使用這種方式同步獲取資源時將導致瀏覽器阻塞:停止響應用戶事件、停止頁面重畫操作。所以,雖然編程最為簡單,但是用戶體驗最差。
2 異步按需裝載(無阻塞,JSI2.0+)。
異步導入,不必多做解釋,用戶體驗好,但是因為其異步特征,處理起來比較麻煩。
3 延遲同步按需裝載(無阻塞,JSI2.0+)。
JSI通過動態(tài)預裝載功能實現(xiàn)的一種同步獲取資源的方法,雖然也是同步,但沒有阻塞,可以算時兼顧易用性和用戶體驗的解決方按。缺點時有一定延遲,當前腳本標簽中不可用。
使用方法(JSI示例)
以一個代碼語法著色程序為例:
類庫位置:org/xidea/example/code/code.js
頁面位置:example/xxx.html
即時同步按需裝載
import("org.xidea.example.code.Code");
var code1 = new Code();
code1.id = "libCode";
code1.decorate();
異步按需裝載
$import("org.xidea.example.code.Code",function(Code){
var code1 = new Code();
code1.id = "libCode";
code1.decorate();
})
延遲同步按需裝載(無阻塞,JSI2.0+)。
<script>"../scripts/boot.js"></script>
<script>
$import("org.xidea.example.code.Code",true);
</script>
<script>
var code1 = new Code();
code1.id = "pageCode";
code1.decorate();
</script>
測試示例:
地址:
http://jsintegration.sourceforge.net/example/code.html
http://www.xidea.org/project/jsi/example/code.html
示例都是jsi的默認示例,可以下載到本地運行,下載后最好能放到一個能受到網速限制的服務器上,只有這樣才能看到阻塞的問題。
參考:
JSI 導入函數(shù): function $import(path, callbackOrLazyLoad, target )
JSI2 預覽版下載:http://groups.google.com/group/jsier/files
腳本程序一般都是下載后執(zhí)行,當腳本庫非常龐大時,一次性下載起來非常費時,傳統(tǒng)的解決方式是,按功能模塊把腳本寫在不同的文件中,頁面上手動加入 script標簽裝載指定內容,但是這有一些缺點,類庫的使用者需要知道沒個腳本之間的關系,順序要求等等,而不可能要求每個類庫使用者都對其非常熟悉,出錯的可能性很大。于是很多框架開始支持導入指令,想使用什么一個導入函數(shù)就完了,不必一堆堆的script文件,不用小心翼翼的關注著他們的依賴關系。
安需裝載的困境:
早期安需裝載(即時同步按需裝載)有一個致命的弱點,瀏覽器阻塞問題。當按需裝載某些類庫時,通常通過XMLHttpRequest同步裝載腳本文件實現(xiàn),這種情況下,在資源下載完成之前,瀏覽器將停止響應用戶事件、停止頁面重畫操作。如果網速很慢,這段時間將非常讓人討厭,就像是死機似的。
以前的解決辦法是,將常用類庫資源直接打包到框架文件中,而按需導入就成了一個宣傳的幌子,沒有太多實際的價值。
安需裝載可分如下三種模式:
l 即時同步按需裝載 (阻塞,JSI、JSVM、dojo)。
最簡單的按需裝載實現(xiàn),通過XMLHttpRequest同步裝載腳本文件實現(xiàn)。問題是,瀏覽器使用這種方式同步獲取資源時將導致瀏覽器阻塞:停止響應用戶事件、停止頁面重畫操作。所以,雖然編程最為簡單,但是用戶體驗最差。
2 異步按需裝載(無阻塞,JSI2.0+)。
異步導入,不必多做解釋,用戶體驗好,但是因為其異步特征,處理起來比較麻煩。
3 延遲同步按需裝載(無阻塞,JSI2.0+)。
JSI通過動態(tài)預裝載功能實現(xiàn)的一種同步獲取資源的方法,雖然也是同步,但沒有阻塞,可以算時兼顧易用性和用戶體驗的解決方按。缺點時有一定延遲,當前腳本標簽中不可用。
使用方法(JSI示例)
以一個代碼語法著色程序為例:
類庫位置:org/xidea/example/code/code.js
頁面位置:example/xxx.html
即時同步按需裝載
import("org.xidea.example.code.Code");
var code1 = new Code();
code1.id = "libCode";
code1.decorate();
異步按需裝載
$import("org.xidea.example.code.Code",function(Code){
var code1 = new Code();
code1.id = "libCode";
code1.decorate();
})
延遲同步按需裝載(無阻塞,JSI2.0+)。
<script>"../scripts/boot.js"></script>
<script>
$import("org.xidea.example.code.Code",true);
</script>
<script>
var code1 = new Code();
code1.id = "pageCode";
code1.decorate();
</script>
測試示例:
地址:
http://jsintegration.sourceforge.net/example/code.html
http://www.xidea.org/project/jsi/example/code.html
示例都是jsi的默認示例,可以下載到本地運行,下載后最好能放到一個能受到網速限制的服務器上,只有這樣才能看到阻塞的問題。
參考:
JSI 導入函數(shù): function $import(path, callbackOrLazyLoad, target )
JSI2 預覽版下載:http://groups.google.com/group/jsier/files
相關文章
JavaScript實現(xiàn)語音排隊叫號系統(tǒng)
語音排隊叫號系統(tǒng)廣泛用于銀行,餐飲,醫(yī)院等場景。本文主要介紹了通過JavaScript實現(xiàn)的語音排隊叫號系統(tǒng),有掃碼排隊,語音叫號等功能。需要的可以參考一下2021-12-12
如何使Chrome控制臺支持多行js模式——意外發(fā)現(xiàn)
一直以來,Chrome控制臺都缺少象IE調試臺那樣的多行執(zhí)行模式,今天意外發(fā)現(xiàn)Chrome其實也支持多行模式2013-06-06
setTimeout()與setInterval()方法區(qū)別介紹
計時器setTimeout()和setInterval()兩個都是js的計時功能的函數(shù)兩個有些區(qū)別,下面為大家簡單介紹下,希望對大家有所幫助2013-12-12
使用Bootstrap Tabs選項卡Ajax加載數(shù)據實現(xiàn)
這篇文章主要介紹了使用Bootstrap Tabs選項卡Ajax加載數(shù)據實現(xiàn),以及遇到的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12

