云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          有許多方法可以把一個(gè)應(yīng)用拆分成基于個(gè)獨(dú)立下載的部分。甚至于將每個(gè)類都分成單獨(dú)的文件,由ClassLoader在需要的時(shí)候加載。但是如果這樣效率是比較低下的,因?yàn)轭惖囊糜兄黠@的“引用地域”;如果你引用了一個(gè)類,往往會(huì)馬上牽涉到需要引用一大堆其他的類,如果把這些類全都打包在一起,效率會(huì)高得多。

          由編譯器自動(dòng)選擇一個(gè)非常好的打包方法是比較困難的。很可能需要在應(yīng)用開發(fā)時(shí)進(jìn)行一些設(shè)定,并不時(shí)地監(jiān)控類的引用。能夠統(tǒng)計(jì)出最優(yōu)的分拆方法:應(yīng)用應(yīng)該分成幾個(gè)SWF,哪些類應(yīng)該放在哪個(gè)SWF中。但是這種方法聽起來更象是一種研究范疇,實(shí)際操作起來非常困難。

          讓我們來看一些更具有操作性的方法。

          很多應(yīng)用分解后,包含兩種類型的功能:“啟動(dòng)后立即填充”和“啟動(dòng)后稍后填充”。

          有許許多多的應(yīng)用是這種模式的。比如:游戲;你有一個(gè)游戲引擎和一些游戲場景?;蛘逷ortals和Porlets; 一些基礎(chǔ)的共享功能和數(shù)據(jù)驅(qū)動(dòng)的小應(yīng)用。或者是一個(gè)大型的有著1500個(gè)頁面的保險(xiǎn)應(yīng)用,運(yùn)行特定功能是只會(huì)訪問一小部分的頁面?;蛘呤浅涑獯罅績?nèi)容的應(yīng)用,它可以獨(dú)立的更新部分內(nèi)容而不是強(qiáng)制用戶每次瀏覽時(shí)都必須下載全部內(nèi)容。

          我稱這些相對(duì)獨(dú)立的可以延遲加載的功能為“模塊”(Modules),稱加載模塊的應(yīng)用為“Shell”。

          在這里,我們先不看如何做,先來看一些

          shell需要能夠與模塊交互,同樣模塊也需要和Shell交互。如果shell引用了modules的一個(gè)類,那么它會(huì)把它鏈接進(jìn)來。同樣,如果模塊類引用了shell類,它也會(huì)把它鏈接進(jìn)來。應(yīng)用能正常運(yùn)行只有兩個(gè)方法:或者引用是相同而且共享的(這樣就不需要下載兩次),或者兩者是不同的,而且沒有任何關(guān)系(盡管兩個(gè)類名字相同,但是它們被認(rèn)為是無關(guān)的,而且不能交互)。

          最好的解決辦法是讓模塊和shell通過接口交互。這樣,shell不需要引用模塊,而是引用模塊會(huì)實(shí)現(xiàn)的一些接口。同樣,模塊不實(shí)現(xiàn)shell的類,而是允許調(diào)用的API接口。

          這樣在shell變化的時(shí)候減少了重新編譯模塊的次數(shù)。具體實(shí)現(xiàn)的變化頻率往往會(huì)比接口本身的變化高得多,而只要接口穩(wěn)定,就不需要重新編譯所有的東西。

          注意:需要使用extern(或者extern-library-path)選項(xiàng)來創(chuàng)建模塊,這樣可以自動(dòng)剔除shell的類,因?yàn)槟K是被加載到shell的子應(yīng)用域中的,將shell的類剔除是安全的。這樣模塊可以真正直接引用shell中的類。


          ?




          評(píng)論

          # re: 在Flex應(yīng)用中使用模塊(modules) I  回復(fù)  更多評(píng)論   

          2007-02-06 09:22 by nshen
          有個(gè)例子就好了

          # re: 在Flex應(yīng)用中使用模塊(modules) I[未登錄]  回復(fù)  更多評(píng)論   

          2007-02-06 09:59 by 云自無心水自閑
          例子馬上就有.
          主站蜘蛛池模板: 辰溪县| 嘉鱼县| 平湖市| 西贡区| 栾城县| 北碚区| 旬邑县| 东乡县| 桓台县| 昆山市| 慈溪市| 沙坪坝区| 青龙| 如皋市| 乐山市| 河源市| 会东县| 绥德县| 南丹县| 贵溪市| 乌兰察布市| 延吉市| 黑龙江省| 疏附县| 瑞丽市| 乐清市| 泾阳县| 伊春市| 西安市| 沂水县| 永胜县| 五台县| 鹰潭市| 威远县| 尉犁县| 博爱县| 江门市| 永仁县| 芷江| 图木舒克市| 盐源县|