Posted on 2007-02-06 00:05
云自無心水自閑 閱讀(1072)
評論(2) 編輯 收藏 所屬分類:
Flex 、
Flex2
有許多方法可以把一個應用拆分成基于個獨立下載的部分。甚至于將每個類都分成單獨的文件,由ClassLoader在需要的時候加載。但是如果這樣效率是比較低下的,因為類的引用有著明顯的“引用地域”;如果你引用了一個類,往往會馬上牽涉到需要引用一大堆其他的類,如果把這些類全都打包在一起,效率會高得多。
由編譯器自動選擇一個非常好的打包方法是比較困難的。很可能需要在應用開發時進行一些設定,并不時地監控類的引用。能夠統計出最優的分拆方法:應用應該分成幾個SWF,哪些類應該放在哪個SWF中。但是這種方法聽起來更象是一種研究范疇,實際操作起來非常困難。
讓我們來看一些更具有操作性的方法。
很多應用分解后,包含兩種類型的功能:“啟動后立即填充”和“啟動后稍后填充”。
有許許多多的應用是這種模式的。比如:游戲;你有一個游戲引擎和一些游戲場景?;蛘逷ortals和Porlets; 一些基礎的共享功能和數據驅動的小應用。或者是一個大型的有著1500個頁面的保險應用,運行特定功能是只會訪問一小部分的頁面?;蛘呤浅涑獯罅績热莸膽?,它可以獨立的更新部分內容而不是強制用戶每次瀏覽時都必須下載全部內容。
我稱這些相對獨立的可以延遲加載的功能為“模塊”(Modules),稱加載模塊的應用為“Shell”。
在這里,我們先不看如何做,先來看一些
shell需要能夠與模塊交互,同樣模塊也需要和Shell交互。如果shell引用了modules的一個類,那么它會把它鏈接進來。同樣,如果模塊類引用了shell類,它也會把它鏈接進來。應用能正常運行只有兩個方法:或者引用是相同而且共享的(這樣就不需要下載兩次),或者兩者是不同的,而且沒有任何關系(盡管兩個類名字相同,但是它們被認為是無關的,而且不能交互)。
最好的解決辦法是讓模塊和shell通過接口交互。這樣,shell不需要引用模塊,而是引用模塊會實現的一些接口。同樣,模塊不實現shell的類,而是允許調用的API接口。
這樣在shell變化的時候減少了重新編譯模塊的次數。具體實現的變化頻率往往會比接口本身的變化高得多,而只要接口穩定,就不需要重新編譯所有的東西。
注意:需要使用extern(或者extern-library-path)選項來創建模塊,這樣可以自動剔除shell的類,因為模塊是被加載到shell的子應用域中的,將shell的類剔除是安全的。這樣模塊可以真正直接引用shell中的類。
?