Jla框架介紹(二) 核心和基本規(guī)范
這一篇將介紹Jla框架的核心,在此之前,先要介紹"Jla"這個名稱,全稱是"JavaScript Lazy App",這個框架的核心是將一系列代碼單元組合起來,在頁面上按需加載,也就是通俗提到的"懶載入",這也就是這個名字的由來。
當我們來仔細審視JavaScript相對于其他語言的特點時,我們會發(fā)現(xiàn),安全性和對懶載入的支持是我們不能忽視的特性,安全性是指用戶通常會信任JavaScript腳本的運行,因此運行的平臺非常廣泛,而懶載入則使得我們在開發(fā)之中,可以靈活的控制程序單元從服務(wù)端流向客戶端的過程,這樣,就為使用JavaScript進行大型項目的開發(fā)提供了可能。
在現(xiàn)在,越來越多的桌面應(yīng)用程序正在改為BS模式,原來的程序可能是幾十兆甚至上百兆,這種情況下,如果通過BS模式一次加載所有的功能到頁面上,會給客戶端帶來非常不好的用戶體驗,對服務(wù)器的壓力也挺大,而且其中的大部分功能未必用戶真正能用得上,因此我們最好是將程序進行分拆,任何功能都是在需要的時候再加載,例如點擊按鈕之后執(zhí)行的操作等。
Jla框架正是為解決這個問題而設(shè)計的框架,我們先看看該框架是怎么定義的:
在Jla框架之中,一個程序由眾多的代碼單元組成,每個代碼單元應(yīng)該是這樣的模式:
1 Jla.require(["namespace.ClassA","namespace.ClassB"],2,function(ClassA,ClassB)
2 {
3 //code of ClassD start
4 function App()
5 {
6 }
7 App.prototype.onClick=function()
8 {
9 Jla.require(["namespace.ClassC"],1,function(ClassC)
10 {
11 //調(diào)用ClassC.完成點擊之后執(zhí)行的操作
12 })
13 }
14 //code of ClassD End
15 Jla.set("namespace.ClassD",App);
16 })
2 {
3 //code of ClassD start
4 function App()
5 {
6 }
7 App.prototype.onClick=function()
8 {
9 Jla.require(["namespace.ClassC"],1,function(ClassC)
10 {
11 //調(diào)用ClassC.完成點擊之后執(zhí)行的操作
12 })
13 }
14 //code of ClassD End
15 Jla.set("namespace.ClassD",App);
16 })
從上面的代碼單元來看,這個代碼單元是定義了一個類,這個類的命名空間是namespace.ClassD,通過Jla.set來向框架之中注冊這個命名空間,這個類使用到了兩個Jla.require方法,代表這個類在運行時會依賴其他的類。
當一個類需要調(diào)用其他類的時候,要求使用Jla.require模式,該模式有三個參數(shù):
參數(shù)1是一個命名空間數(shù)組,代表需要調(diào)用哪幾個類
參數(shù)2是依賴的類型,有三種類型:
值1代表應(yīng)該立即去獲取該類,并在獲取完成之后執(zhí)行回調(diào)函數(shù),主要用在需要懶載入的情況,例如點擊按鈕之后執(zhí)行的函數(shù)等
值2代表的含義和1相同,但是進一步建議在代碼發(fā)布時應(yīng)該將這幾個類也打包在一起(意味著依賴程度太高,不建議使用動態(tài)加載),主要用在一個類必須引用另一個類才能運行的情況下
值0代表不需要主動去加載該類,但假如該類已經(jīng)加載或者后面被其他的類引用加載,則執(zhí)行回調(diào)函數(shù),用的比較少,主要用在一些事件綁定過程上。
參數(shù)3是回調(diào)函數(shù),在需要的類都加載完成后,會自動執(zhí)行回調(diào)函數(shù),而且會將需要的類列表作為回調(diào)函數(shù)的參數(shù)傳遞,這樣就可以直接使用那些類,而不需要再次執(zhí)行
雖然以上的代碼非常簡單,實際上也就使用了Jla.require和Jla.set兩個函數(shù),但這段代碼已經(jīng)完整表達了Jla框架的核心規(guī)范,我簡單的描述一下這個核心所定義的規(guī)范:
1.不要直接調(diào)用一個類,對外部類的引用都應(yīng)該通過Jla.require來引用,雖然你可能直接通過命名空間或者Jla.get(namespace)調(diào)用到那個類,因為這樣就破壞了規(guī)范,而且如果你調(diào)用的時候該類還沒有加載完成,就會出現(xiàn)異常;
2.每個代碼單元都應(yīng)該明確在實現(xiàn)自己的邏輯的過程中需要依賴哪幾個類,依賴程度如何,只有對這些能明確下來,才能保證最后應(yīng)用程序只會載入需要的邏輯單元;
3.每個類都只應(yīng)該關(guān)心自己實現(xiàn)的邏輯,而不需要關(guān)注最終的程序是什么樣子的,這樣才能保證每一個代碼單元的重用性。
這個框架規(guī)范比較簡單,僅僅拿著這個框架去開發(fā)會遇到一些麻煩,但是實際上這已經(jīng)是一個完整的開發(fā)框架,后面我繼續(xù)描述的內(nèi)容比較多,但都是依賴這個框架的應(yīng)用,并不是對這個框架的補充。
posted on 2011-01-15 13:09 K_Reverter 閱讀(1656) 評論(4) 收藏 舉報
浙公網(wǎng)安備 33010602011771號