動(dòng)態(tài)加載JS函數(shù)
一般性的,當(dāng)我們需要加載js文件的時(shí)候都會(huì)使用script標(biāo)簽來(lái)實(shí)現(xiàn),類(lèi)似于如下代碼:
1.嚴(yán)格的讀取順序。由于瀏覽器按照<script>在網(wǎng)頁(yè)中出現(xiàn)的順序,讀取Javascript文件,然后立即運(yùn)行,導(dǎo)致在多個(gè)文件互相依賴(lài)的情況下,依賴(lài)性最小的文件必須放在最前面,依賴(lài)性最大的文件必須放在最后面,否則代碼會(huì)報(bào)錯(cuò)。
2.性能問(wèn)題。瀏覽器采用"同步模式"加載<script>標(biāo)簽,也就是說(shuō),頁(yè)面會(huì)"堵塞"(blocking),等待javascript文件加載完成,然后再運(yùn)行后面的HTML代碼。當(dāng)存在多個(gè)<script>標(biāo)簽時(shí),瀏覽器無(wú)法同時(shí)讀取,必須讀取完一個(gè)再去讀取另一個(gè),造成讀取時(shí)間大大延長(zhǎng),頁(yè)面響應(yīng)緩慢。
這個(gè)時(shí)候我們就會(huì)想到去動(dòng)態(tài)加載JS,動(dòng)態(tài)加載js的實(shí)現(xiàn)方法類(lèi)似于如下代碼
這樣不會(huì)造成頁(yè)面堵塞,但會(huì)造成另外一個(gè)問(wèn)題:這樣加載的Javascript文件,不在原始的DOM結(jié)構(gòu)之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回調(diào)函數(shù)對(duì)它無(wú)效。
這個(gè)時(shí)候我們就會(huì)想到用一些外部函數(shù)庫(kù)來(lái)有效的管理JS加載問(wèn)題。
下面進(jìn)入正題說(shuō)說(shuō)LAB.js
LAB.js
如果我們使用傳統(tǒng)的方法來(lái)加載js的話,寫(xiě)的代碼一般會(huì)如下方代碼所示風(fēng)格。
如果我們使用LAB.js的話,要實(shí)現(xiàn)上述代碼功能,則使用如下方式
可以同時(shí)運(yùn)行多條$LAB鏈,但是它們之間是完全獨(dú)立的,不存在次序關(guān)系。如果你要確保一個(gè)Javascript文件在另一個(gè)文件之后運(yùn)行,你只能把它們寫(xiě)在同一個(gè)鏈操作之中。只有當(dāng)某些腳本是完全無(wú)關(guān)的時(shí)候,你才應(yīng)該考慮把它們分成不同的$LAB鏈,表示它們之間不存在相關(guān)關(guān)系。
一般性的使用示例
在控制臺(tái)看LAB.js的加載信息
如果你想調(diào)試或者說(shuō)在控制臺(tái)看各個(gè)js加載信息的話,可以使用$LAB.setGlobalDefaults 方法,具體使用請(qǐng)看代碼示例。
<script type="text/javascript">
$LAB.setGlobalDefaults({ Debug: true }) //打開(kāi)調(diào)試
$LAB
//第一個(gè)執(zhí)行鏈
.script('http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js')
//第二個(gè)執(zhí)行鏈
.wait(function () {
//console.log(window.$)
//console.log(window._)
})
//第三個(gè)執(zhí)行鏈
.script('http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/js/bootstrap.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js')
//第四個(gè)執(zhí)行鏈
.wait(function () {
// console.log(plugin1Function)
// console.log(plugin2Function)
})
//第五個(gè)執(zhí)行鏈
.script('js/aaa.js')
.script('js/bbb.js')
//第六個(gè)執(zhí)行鏈
.wait(function () {
// console.log(module1Function)
// console.log(module2Function)
})
</script>
這個(gè)時(shí)候打開(kāi)控制臺(tái),看信息,如下圖所示:

我相信你看到這兒肯定會(huì)為L(zhǎng)ab.js的調(diào)試功能驚嘆不已。事實(shí)上Lab.js確實(shí)是挺強(qiáng)大的,我也只是了解它的一些淺顯的功能。先記下來(lái),拿來(lái)分享一下同時(shí)也為了以后方便自己。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注