專利名稱:把傳統(tǒng)軟件轉(zhuǎn)化為富客戶端軟件的代碼拆分方法
技術(shù)領(lǐng)域:
本發(fā)明屬于軟件工程領(lǐng)域,具體是一種把傳統(tǒng)應(yīng)用軟件轉(zhuǎn)化為富客戶端應(yīng)用軟件 時的代碼拆分方法。
背景技術(shù):
富客戶端應(yīng)用是客戶端/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用的一種形式。它是指除用戶交互 界面之外,將網(wǎng)絡(luò)應(yīng)用的一部分運算任務(wù)交由客戶端完成,從而提高客戶端的反應(yīng)速度和 用戶體驗。它既包含基于桌面客戶端富客戶端應(yīng)用,也包括使用瀏覽器作為客戶端的富客 戶端Web應(yīng)用。絕大多數(shù)的基于桌面客戶端的網(wǎng)絡(luò)應(yīng)用和大部分最新的Web應(yīng)用都是富客 戶端應(yīng)用。基于桌面客戶端的富客戶端應(yīng)用一股依賴于C,Java, C#等桌面開發(fā)技術(shù),以及 網(wǎng)絡(luò)傳輸層技術(shù);富客戶端Web應(yīng)用主要依靠JavaScript技術(shù),DOM技術(shù)和AJAX技術(shù)。在代碼拆分方面,微軟公司的研究人員在2008年曾經(jīng)發(fā)表過一篇有關(guān)對web應(yīng)用 進行代石馬拆分的論文(Benjamin Livshits, and Emre Kiciman, Doloto :code splitting for network-boundweb 2. Oapplications, in Proceedings of SIGS0FT '08/FSE-16 Proceedings of the 16th ACMSIGSOFT International Symposium on Foundations of software engineering, pages 350-360,2008.)。該研究的主要內(nèi)容是將富客戶端web應(yīng) 用的瀏覽器端代碼拆分成若干部分,并根據(jù)用戶的需要分批下載到瀏覽器端執(zhí)行。該研究 與本發(fā)明不同該研究解決的問題是拆分富客戶端web應(yīng)用的瀏覽器端代碼,而本發(fā)明是 將傳統(tǒng)應(yīng)用的全部代碼拆分成富客戶端代碼和服務(wù)器端代碼兩部分。本發(fā)明要使用到最小割集算法,最小割集是圖論中的一個概念,對于一個帶權(quán)圖 G (V, E,f),其中V為節(jié)點集,E為邊集,f為邊權(quán)函數(shù),割集是邊集E的一個子集E’,滿足 G(V, E/E’,f)不連通。最小割集是一個圖的所有割集中邊權(quán)和最小的割集。特別的,(s, t)_最小割集,是指在圖中的所有將s和t兩個節(jié)點拆分到不同連通子圖的割集中,邊權(quán)和 最小的割集。求(s,t)_最小割集的經(jīng)典算法為-karp算法(Jack Edmonds and Richard Μ. Karp(1972). “Theoretical improvements in algorithmic efficiency for network flow problems". Journal of the ACM 19(2) :248_264)?,F(xiàn)有常見的代碼拆分方法是由人工對代碼進行分析拆分,這種方法的主要缺點是 沒有對代碼之間的依賴程度進行定量分析,因此沒有辦法保證拆分后較低的網(wǎng)絡(luò)傳輸量, 使得拆分后程序的性能較差。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種代碼拆分方案,對于傳統(tǒng)單機應(yīng)用和傳統(tǒng)Web應(yīng)用,將 它們的代碼進行拆分,得到客戶端代碼和服務(wù)器端代碼兩部分,保證拆分后客戶端與服務(wù) 器端之間的網(wǎng)絡(luò)數(shù)據(jù)傳輸量最低。本發(fā)明的主要思想是通過對傳統(tǒng)應(yīng)用程序進行插裝和大量測試,定量的估計應(yīng)用 中代碼塊之間的數(shù)據(jù)傳輸量,然后根據(jù)代碼塊之間的數(shù)據(jù)傳輸關(guān)系和數(shù)據(jù)傳輸量生成一個模塊調(diào)用圖,最后對這個圖求最小割集,將圖拆分成兩部分,并將兩部分分別作為客戶端代 碼和服務(wù)器端代碼,從而保證了拆分后網(wǎng)絡(luò)傳輸量最小。本發(fā)明包含三部分內(nèi)容1、應(yīng)用程序的數(shù)據(jù)傳輸量插裝與測試;2、模塊調(diào)用圖的 生成;3、模塊調(diào)用圖的拆分。其總體流程圖如圖4和圖5所示。下面分別講述各個部分(1)應(yīng)用程序的數(shù)據(jù)傳輸量插裝與測試對應(yīng)用程序進行函數(shù)級別的數(shù)據(jù)傳輸量插裝,即在每個函數(shù)調(diào)用點加寫兩條 語 句,在執(zhí)行到函數(shù)調(diào)用的時候分別輸出函數(shù)實參的大小和函數(shù)返回值的大小。這種插裝可 以通過使用現(xiàn)存的自動化插裝工具(例如Java語言的ASM,C#語言的CCI等)找到插裝位 置,然后插入數(shù)據(jù)傳輸量輸出語句,也可以手工找到插裝位置,然后插入數(shù)據(jù)傳輸量輸出語 句。數(shù)據(jù)傳輸量輸出語句即輸出函數(shù)調(diào)用時實參和返回值大小的語句,其中函數(shù)實參 或返回值的大小按下面的方法判定1.若為整數(shù),固定為所使用語言的整型數(shù)的字節(jié)數(shù)(例如Java語言為8字節(jié));2.若為字符串或字符指針,則調(diào)用字符串長度函數(shù)(語言庫函數(shù)提供,例如Java 為String, length())求出字符串長度,即為實參大??;3.若為結(jié)構(gòu)體或類對象指針,則根據(jù)結(jié)構(gòu)體和類的定義,對結(jié)構(gòu)體或類的域變量 的大小求和。其中域變量若為整數(shù),字符串則按照1,2中規(guī)則求出大小,若為結(jié)構(gòu)體或類對 象指針,則按3中的規(guī)則遞歸求出它的大小。4.若為數(shù)組或向量,則根據(jù)調(diào)用數(shù)組或向量的長度函數(shù)(Java中List的長度為 List, length())求出數(shù)組的元素個數(shù),然后乘以每個元素的大小,其中每個元素的大小根 據(jù)規(guī)則1-4求出。在對應(yīng)用程序進行插裝之后,即可使用測試數(shù)據(jù)進行測試,插裝后的應(yīng)用程序在 測試過程中將會輸出一系列函數(shù)調(diào)用事件的序列,其中每個事件包含調(diào)用時傳遞實參的大 小的信息。(2)模塊調(diào)用圖的生成在步驟(1)獲得函數(shù)調(diào)用事件的序列之后,接著從函數(shù)調(diào)用事件序列中生成模塊 調(diào)用圖。模塊調(diào)用圖是一個帶權(quán)圖。圖中的節(jié)點是函數(shù)調(diào)用事件序列中涉及的函數(shù),邊是 函數(shù)之間的調(diào)用關(guān)系,邊上的權(quán)是函數(shù)調(diào)用中的總數(shù)據(jù)傳輸量,即兩個函數(shù)間所有次調(diào)用 的數(shù)據(jù)傳輸量(調(diào)用實參與返回值的大小之和)的總和。模塊調(diào)用圖生成的算法如下輸入函數(shù)調(diào)用事件序列輸出模塊調(diào)用圖1.獲得函數(shù)調(diào)用事件序列中的下一個函數(shù)調(diào)用事件;2.如果事件中的主調(diào)函數(shù)對應(yīng)的節(jié)點在模塊調(diào)用圖中,轉(zhuǎn)4 ;3.添加主調(diào)函數(shù)對應(yīng)的節(jié)點;4.如果事件中的被調(diào)函數(shù)對應(yīng)的節(jié)點在模塊調(diào)用圖中,轉(zhuǎn)6 ;5.添加被調(diào)函數(shù)對應(yīng)的節(jié)點;6.如果模塊調(diào)用圖中,主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間有邊,轉(zhuǎn)8 ;7.在主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間添加一條無向邊,權(quán)值為0 ;
8.主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間的邊權(quán)值+ =函數(shù)調(diào)用事件中的實參大 小與返回值大小之和;9.如果未到函數(shù)調(diào)用序列結(jié)尾,轉(zhuǎn)1 ;10.模塊調(diào)用圖中每一條無向邊(u,v,w(U,ν))(其中w(U,ν)為邊權(quán)值)變?yōu)閮?條具有相同權(quán)值方向相反的有向邊,S卩(U,V,W(U,V))和(v,u,w(u,v));
11.算法結(jié)束(3)模塊調(diào)用圖的拆分首先,確定界面函數(shù)與存儲函數(shù)。其中界面函數(shù)為和用戶界面交互的函數(shù)(例如 Java中的JButton. setText ()等,PHP中的echo等);存儲函數(shù)為和數(shù)據(jù)庫或者文件交互 的函數(shù)。這兩類函數(shù)集合均可以通過相應(yīng)語言的庫函數(shù)文檔獲得。然后,在模塊調(diào)用圖中,獲取界面節(jié)點集合和存儲節(jié)點集合,其中默認界面節(jié)點集 合為界面函數(shù)對應(yīng)的節(jié)點的集合,默認存儲節(jié)點集合為存儲函數(shù)對應(yīng)的節(jié)點的集合。程序 開發(fā)設(shè)計人員可以根據(jù)自己的需要將某些函數(shù)對應(yīng)的節(jié)點添加到界面節(jié)點集合或存儲節(jié) 點集合中ο接著,進行節(jié)點集合的融合,即將界面節(jié)點集合融合為界面節(jié)點、存儲節(jié)點集合融 合為存儲節(jié)點。在融合的過程中,去掉節(jié)點集合內(nèi)部的所有點和邊,并產(chǎn)生一個新的節(jié)點 new,對于任意一條節(jié)點集合中的點a到集合外的點b的邊,增加一條new到b的邊,對于任 意一條節(jié)點集合外的點a到集合中的點b的邊,增加一條b到new的邊,最后將多重邊進行 融合。融合算法如下輸入模塊調(diào)用圖,融合節(jié)點集合S輸出模塊調(diào)用圖1.模塊調(diào)用圖中產(chǎn)生一個新的節(jié)點new ;2.讀入融合節(jié)點集合中的下一個節(jié)點a ;3.對于從a出發(fā)有邊的每一個節(jié)點b,如果b屬于S,轉(zhuǎn)5 ;4.添加一條邊從new到b,權(quán)值為邊(a,b)的權(quán)值;5.對于到達a有邊的每一個節(jié)點b,如果b屬于S,轉(zhuǎn)7 ;6.添加一條邊從b到new,權(quán)值為邊(b,a)的權(quán)值;7.從模塊調(diào)用圖中刪掉S中的所有節(jié)點,以及它們關(guān)聯(lián)的邊;8.對于模塊調(diào)用圖中的每一節(jié)點對(u,v),如果從u到ν存在不止一條邊,則刪掉 這些邊,并增加一條邊(U,V)權(quán)值為之前從U到V的所有邊權(quán)值之和。一個節(jié)點集合融合的例子如圖1 圖3。最后,以存儲節(jié)點為源,以界面節(jié)點為漏,執(zhí)行最小割集算法,求出一個將存儲節(jié) 點S與界面節(jié)點t分開的(S,t)_最小割集。這個割集將模塊調(diào)用圖拆分成兩部分,其中與 界面節(jié)點連通的部分即為客戶端代碼,與存儲節(jié)點連通的部分即為服務(wù)器端代碼。本發(fā)明的有益效果利用量化的模塊調(diào)用信息和模塊調(diào)用圖的最小割集拆分,本 發(fā)明可以使得傳統(tǒng)應(yīng)用向富客戶端應(yīng)用轉(zhuǎn)型時,代碼拆分后網(wǎng)絡(luò)傳輸量最小,從而提高富 客戶端應(yīng)用的性能。本發(fā)明同時還允許程序開發(fā)設(shè)計人員將一些函數(shù)直接放置在他們認為 合適的一端,并且能保證拆分后代碼產(chǎn)生最低的網(wǎng)絡(luò)傳輸量,這使得本發(fā)明能夠適應(yīng)從傳 統(tǒng)應(yīng)用轉(zhuǎn)向富客戶端應(yīng)用的各種情況。
圖1 模塊調(diào)用示意圖;圖2 融合節(jié)點后帶多重邊的模塊調(diào)用圖;圖3 融合多重邊后得到的模塊調(diào)用圖;圖4:總體流程簡圖;圖5 總體流程詳圖;圖6:函數(shù)調(diào)用關(guān)系圖;圖7 增加EditUI節(jié)點;圖 8 :±曾力卩 ShowTextF 節(jié)點;圖 9 在 EditUI 和 showTextF 間添加邊;圖10 給邊添加的權(quán)值;圖 11 處理 fiIeManageF 節(jié)點;圖12 增加EditUI和showTextF節(jié)點之間的權(quán)值;圖13:模塊調(diào)用圖;圖14:有向模塊調(diào)用圖;圖15 融合UI模塊之后的模塊調(diào)用圖;圖16 執(zhí)行分割后的模塊調(diào)用圖。其中圖1 圖3為一個節(jié)點融合的例子,其中圓圈代表節(jié)點,邊上的數(shù)字代表權(quán) 值;圖6 圖16為實施例中使用的圖形。
具體實施例下面用一個例子來對本發(fā)明作進一步的說明,但本發(fā)明并不僅限于如下實施例。一個單機版的記事本軟件,這個軟件的界面部分包含編輯界面EditUI,文件 處理界面FileUI,字體選擇界面FontUI。數(shù)據(jù)存儲部分包含一個文件打開存儲部件 FileIO0中間運算部分包括拼寫檢查函數(shù)checkF,文件格式轉(zhuǎn)換函數(shù)fileTransF,文件 管理函數(shù)fileManageF,字體控制函數(shù)fontCtrF,文本展現(xiàn)函數(shù)showTextF,文本操作函數(shù) manageTextF,時間日期函數(shù)timeF。這些函數(shù)之間的調(diào)用關(guān)系如圖6?,F(xiàn)在計劃將這個記事本軟件變成一個網(wǎng)絡(luò)記事本軟件,即用戶在本地編輯文本, 并將文本存儲到遠端的服務(wù)器上,這樣用戶就可以在不同的地點(例如家里和辦公室)對 文本進行編輯,而且不同的用戶可以同時對同一文本進行閱讀和編輯。下面使用本發(fā)明對 這個軟件進行拆分。第一步,對軟件進行數(shù)據(jù)傳輸量插裝。例如下面的EditUI對showTextF的調(diào)用struct extendString{char氺str ;int font ;}//extendString表示一個帶格式的字符串EditUI () {extendString氺stringList ;
int option ;...stringList = showTextF(option)}增加下面的插裝語句(加粗)EditUI () {List<extendString>stringList ;int option ;...int size = 0 ;size = size+sizeof(option);stringList = showTextF(option)for (int i = 0 ;i < stringList. length () ;i++) {size = size + st r_ Ien (stringList [i].str)+sizeof (stringList [i]. option ;) ;}print ( "call from EditUI to showTextF, with size% d,,,size);}然后使用測試用例對插裝后的程序進行測試??梢缘玫揭粋€調(diào)用事件序列,例 如call from EditUI to showTextF, with size 3000call from showTextF to fiIeManageF with size 2000call from EditUI to showTextF, with size 1000call from showTextF to fiIeManageF with size 500...第二步,從上面的調(diào)用序列中得到模塊調(diào)用圖,使用模塊調(diào)用圖生成算法。例如 對于上面的調(diào)用事件序列,首先初始化模塊調(diào)用圖為空圖,然后取第一個事件(算法第1 步)"callfrom EditUI to showTextF, with size 3000”,判斷(算法第 2 步)主調(diào)函數(shù) EditUI不在模塊調(diào)用圖中,則增加節(jié)點EditUI (算法第3步)如圖7。然后判斷(算法第4步)被調(diào)函數(shù)showTextF不在模塊調(diào)用圖中,則增加節(jié)點 showTextF(算法第5步)如圖8。然后判斷(算法第6步)圖中從EditUI到showTextF之間沒有邊,則增加邊(算法第7步)如圖9.然后執(zhí)行第8步,邊權(quán)值增加調(diào)用事件的數(shù)據(jù)傳輸量3000,如圖10。第9步,判斷事件序列中還存在事件,轉(zhuǎn)第1步,取下一個事件“call from showTextFto fiIeManageF with size 2000”,然后執(zhí)行 2-8 步,得到如圖 11。然后判斷事件序列中還存在事件,轉(zhuǎn)第1步,取下一個事件“call from EditUI toshowTextF,with size 1000”,然后執(zhí)行 2-8 步,其中第 8 步在從 EditUI 到 showTextF 之 間的邊上增加1000權(quán)值,得到如圖12。然后依次繼續(xù)取事件序列中的調(diào)用事件,不停執(zhí)行2-8步,直到事件序列中的最后一個事件為止。此時可以得到模塊調(diào)用圖如圖13。最后執(zhí)行算法第10步,得到一個有向的模塊調(diào)用圖14。第三步,根據(jù)上面的這個模塊調(diào)用圖進行節(jié)點融合和拆分。首先將三個UI模塊進 行融合,得到如下的模塊調(diào)用圖15。然后使用最小割集算法對這個調(diào)用圖進行分割得到下面的分割后的模塊調(diào)用圖 16。則得到代碼拆分的結(jié)果
應(yīng)當將UI (EditUI, FileUI, FontUI),checkF, showTextF, manageTextF 四部分放 在客戶端,其余部分放在服務(wù)器端。雖然通過實施例詳細描述了本發(fā)明代碼拆分方法,但是本領(lǐng)域的技術(shù)人員應(yīng)當理 解,本發(fā)明并不限于實施例中所公開的內(nèi)容和范圍,在不脫離本發(fā)明的實質(zhì)和精神范圍內(nèi), 可以對本發(fā)明進行各種變換、修改和替換。
權(quán)利要求
一種把傳統(tǒng)應(yīng)用軟件轉(zhuǎn)型為富客戶端軟件的代碼拆分方法,其特征是拆分后生成的富客戶端軟件的網(wǎng)絡(luò)數(shù)據(jù)傳輸量最小;該方法主要包含以下步驟第一步、對應(yīng)用程序進行數(shù)據(jù)傳輸量的插裝并進行測試;第二步、根據(jù)測試結(jié)果生成模塊調(diào)用圖;第三步、對模塊調(diào)用圖求最小割集,將圖拆分成兩部分,并將兩部分分別作為客戶端代碼和服務(wù)器端代碼。
2.如權(quán)利要求1所述的方法,其特征是第一步中插裝的方法為,在每個函數(shù)調(diào)用點加 寫兩條語句,在執(zhí)行到函數(shù)調(diào)用的時候分別輸出函數(shù)實參的大小和函數(shù)返回值的大小。
3.如權(quán)利要求1所述的方法,其特征是第二步中模塊調(diào)用圖是一個帶權(quán)圖,圖中的節(jié) 點是函數(shù)調(diào)用事件序列中涉及的函數(shù),邊是函數(shù)之間的調(diào)用關(guān)系,邊上的權(quán)是函數(shù)調(diào)用中 的總數(shù)據(jù)傳輸量。
4.如權(quán)利要求1或3所述的方法,其特征是第二步中生成模塊調(diào)用圖的算法為1)獲得函數(shù)調(diào)用事件序列中的下一個函數(shù)調(diào)用事件;2)如果事件中的主調(diào)函數(shù)對應(yīng)的節(jié)點在模塊調(diào)用圖中,轉(zhuǎn)4);3)添加主調(diào)函數(shù)對應(yīng)的節(jié)點;4)如果事件中的被調(diào)函數(shù)對應(yīng)的節(jié)點在模塊調(diào)用圖中,轉(zhuǎn)6);5)添加被調(diào)函數(shù)對應(yīng)的節(jié)點;6)如果模塊調(diào)用圖中,主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間有邊,轉(zhuǎn)8);7)在主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間添加一條無向邊,權(quán)值為0;8)把主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng)的節(jié)點之間的邊權(quán)值設(shè)置為主調(diào)函數(shù)與被調(diào)函數(shù)對應(yīng) 的節(jié)點之間的邊權(quán)值加上函數(shù)調(diào)用事件中的實參大小與返回值大小之和;9)如果未到函數(shù)調(diào)用序列結(jié)尾,轉(zhuǎn)1);10)模塊調(diào)用圖中每一條無向邊變?yōu)閮蓷l具有相同權(quán)值方向相反的有向邊。
5.如權(quán)利要求1所述的方法,其特征是,第三步的實現(xiàn)步驟為I)確定界面函數(shù)和存儲函數(shù);11)在模塊調(diào)用圖中,獲取界面節(jié)點集合和存儲節(jié)點集合;III)進行節(jié)點集合的融合,將界面節(jié)點集合融合為界面節(jié)點、存儲節(jié)點集合融合為存 儲節(jié)點;IV)以存儲節(jié)點為源,以界面節(jié)點為漏,執(zhí)行最小割集算法,求出一個將存儲節(jié)點與界 面節(jié)點分開的最小割集,這個割集將模塊調(diào)用圖拆分成兩部分,其中與界面節(jié)點連通的部 分即為客戶端代碼,與存儲節(jié)點連通的部分即為服務(wù)器端代碼。
6.如權(quán)利要求2所述的方法,其特征是,實參和返回值大小的計算方法為a)若為整數(shù),固定為所使用語言的整型數(shù)的字節(jié)數(shù);b)若為字符串或字符指針,則調(diào)用字符串長度函數(shù)求出字符串長度,即為它的大??;c)若為結(jié)構(gòu)體或類對象指針,則根據(jù)結(jié)構(gòu)體和類的定義,對結(jié)構(gòu)體或類的域變量的大 小求和。其中域變量若為整數(shù),字符串則按照a),b)中規(guī)則求出大小,若為結(jié)構(gòu)體或類對象 指針,則按c)中的規(guī)則遞歸求出它的大小。d)若為數(shù)組或向量,則根據(jù)調(diào)用數(shù)組或向量的長度函數(shù)求出數(shù)組的元素個數(shù),然后乘 以每個元素的大小,其中每個元素的大小根據(jù)規(guī)則a)_d)求出。
7.如權(quán)利要求5中所述的方法,其特征是,第I)步中確定界面函數(shù)和存儲函數(shù)的方法 是根據(jù)相應(yīng)語言的庫函數(shù)文檔判斷,或者用戶自行確定。
8.如權(quán)利要求5所述的方法,其特征是,第III)步中進行節(jié)點融合的算法為i)模塊調(diào)用圖中產(chǎn)生一個新的節(jié)點new;ii)讀入融合節(jié)點集合中的下一個節(jié)點a;iii)對于從節(jié)點a出發(fā)有邊的每一個節(jié)點b,如果節(jié)點b屬于S,轉(zhuǎn)v);iv)添加一條邊從節(jié)點new到節(jié)點b,權(quán)值為邊(a,b)的權(quán)值;v)對于到達節(jié)點a有邊的每一個節(jié)點b,如果節(jié)點b屬于S,轉(zhuǎn)vii);vi)添加一條邊從節(jié)點b到節(jié)點new,權(quán)值為邊(b,a)的權(quán)值;vii)從模塊調(diào)用圖中刪掉S中的所有節(jié)點,以及它們關(guān)聯(lián)的邊;Viii)對于模塊調(diào)用圖中的每一節(jié)點對(U,V),如果從1!到¥存在不止一條邊,則刪掉 這些邊,并增加一條邊(u,v)權(quán)值為之前從u到v的所有邊權(quán)值之和。
全文摘要
本發(fā)明提供了一種把傳統(tǒng)軟件轉(zhuǎn)化為富客戶端軟件的代碼拆分方法,屬于軟件工程領(lǐng)域。該方法包括首先對應(yīng)用程序進行數(shù)據(jù)傳輸量的插裝并進行測試,據(jù)此生成模塊調(diào)用圖,然后對該圖求最小割集,將圖拆分成兩部分,并將兩部分分別作為客戶端代碼和服務(wù)器端代碼,從而保證了拆分后的應(yīng)用的網(wǎng)絡(luò)傳輸量最小。本發(fā)明可以使得傳統(tǒng)應(yīng)用向富客戶端應(yīng)用轉(zhuǎn)型時,代碼拆分后網(wǎng)絡(luò)傳輸量最小,從而提高富客戶端應(yīng)用的性能。本發(fā)明同時還允許程序開發(fā)設(shè)計人員將一些函數(shù)直接放置在他們認為合適的一端,并且能保證拆分后代碼產(chǎn)生最低的網(wǎng)絡(luò)傳輸量,這使得本發(fā)明能夠適應(yīng)從傳統(tǒng)應(yīng)用轉(zhuǎn)向富客戶端應(yīng)用的各種情況。
文檔編號G06F9/44GK101833455SQ20101017093
公開日2010年9月15日 申請日期2010年5月13日 優(yōu)先權(quán)日2010年5月13日
發(fā)明者張路, 梅宏, 王嘯吟 申請人:北京大學