動態加載JS函數
一般性的,當我們需要加載js文件的時候都會使用script標簽來實現,類似于如下代碼:
1.嚴格的讀取順序。由于瀏覽器按照<script>在網頁中出現的順序,讀取Javascript文件,然后立即運行,導致在多個文件互相依賴的情況下,依賴性最小的文件必須放在最前面,依賴性最大的文件必須放在最后面,否則代碼會報錯。
2.性能問題。瀏覽器采用"同步模式"加載<script>標簽,也就是說,頁面會"堵塞"(blocking),等待javascript文件加載完成,然后再運行后面的HTML代碼。當存在多個<script>標簽時,瀏覽器無法同時讀取,必須讀取完一個再去讀取另一個,造成讀取時間大大延長,頁面響應緩慢。
這個時候我們就會想到去動態加載JS,動態加載js的實現方法類似于如下代碼
這樣不會造成頁面堵塞,但會造成另外一個問題:這樣加載的Javascript文件,不在原始的DOM結構之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回調函數對它無效。
這個時候我們就會想到用一些外部函數庫來有效的管理JS加載問題。
下面進入正題說說LAB.js
LAB.js
如果我們使用傳統的方法來加載js的話,寫的代碼一般會如下方代碼所示風格。
如果我們使用LAB.js的話,要實現上述代碼功能,則使用如下方式
可以同時運行多條$LAB鏈,但是它們之間是完全獨立的,不存在次序關系。如果你要確保一個Javascript文件在另一個文件之后運行,你只能把它們寫在同一個鏈操作之中。只有當某些腳本是完全無關的時候,你才應該考慮把它們分成不同的$LAB鏈,表示它們之間不存在相關關系。
一般性的使用示例
在控制臺看LAB.js的加載信息
如果你想調試或者說在控制臺看各個js加載信息的話,可以使用$LAB.setGlobalDefaults 方法,具體使用請看代碼示例。
<script type="text/javascript">
$LAB.setGlobalDefaults({ Debug: true }) //打開調試
$LAB
//第一個執行鏈
.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')
//第二個執行鏈
.wait(function () {
//console.log(window.$)
//console.log(window._)
})
//第三個執行鏈
.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')
//第四個執行鏈
.wait(function () {
// console.log(plugin1Function)
// console.log(plugin2Function)
})
//第五個執行鏈
.script('js/aaa.js')
.script('js/bbb.js')
//第六個執行鏈
.wait(function () {
// console.log(module1Function)
// console.log(module2Function)
})
</script>
這個時候打開控制臺,看信息,如下圖所示:
我相信你看到這兒肯定會為Lab.js的調試功能驚嘆不已。事實上Lab.js確實是挺強大的,我也只是了解它的一些淺顯的功能。先記下來,拿來分享一下同時也為了以后方便自己。
新聞熱點
疑難解答