2008-12-01 40 views
12

爲了在我們的應用程序的各個部分之間提供漂亮的URL,我們將所有內容拆分爲獨立編譯的幾個模塊。例如,有一個「經理」部分和一個「編輯」部分。編輯器將在新窗口中啓動。通過這樣做,我們可以直接鏈接到編輯器:GWT中的大型應用程序:一個模塊還是幾個?

/com.example.EditorApp?id=1 

EditorApp模塊只是獲取id的值並加載文檔。

問題在於這兩個模塊之間通用的所有代碼在輸出中都是重複的。這包括任何靜態內容(圖形),樣式表等

而另一個問題是編譯時生成JavaScript是近一倍,因爲我們有具有將被處理兩次兩個模塊之間共享一些複雜的代碼。

有沒有人處理過這個?我正在考慮拆分單獨的模塊並將它們全部合併到一個編譯目標中。唯一的缺點是我們的「應用程序」的網址成爲了類似:

/com.example.MainApp?mode=editor&id=1 

每個窗口加載主模塊,檢查模式參數的值,並調用相應的模塊初始化代碼。

+0

這可能有所幫助:http://code.google.com/webtoolkit/doc/latest/DevGuideCodeSplitting.html – 2010-12-30 08:17:51

+0

是的。我在GWT 2.x發佈之前問過這個問題。事情變得更加簡單和強大。 – 2010-12-31 06:16:01

回答

8

我已經建立了GWT幾個非常大的應用程序,而且我覺得最好的東西分割成模塊,以及通用代碼移動到它自己的區域,像你這樣做。在我們的例子中,原因很簡單,我們的應用程序的某些部分與其他部分非常不同,所以從編譯大小的角度來看它是有意義的。我們的應用程序的主要部分編譯爲300kb,其他部分編譯爲25-40kb。如果我們把它們全部放入一個,用戶將被留下600kb的下載,這對我們來說是不可接受的。

從設計和可重用性的角度來看,儘可能多地分離出事物也是更有意義的,因爲我們已經重新使用了許多我們在此項目上構建的模塊。

編譯的時候是不是你通常應該擔心,因爲你其實可以讓它更快一點,如果你有單獨的模塊。我們使用ant來構建我們的項目,並且我們將它設置爲僅編譯已更改的GWT,並且在開發過程中僅爲一個瀏覽器構建,我們項目的典型編譯時間爲20秒,並且我們有很多代碼。你可以看到這個here的例子。

另一個小問題:我假設您知道您不必使用它生成的默認GWT路徑?所以,而不是com.MyPackage.Package,你可以把它放在一個文件夾中,名字好像'ui'或其他東西。一旦編譯過的GWT不關心你的放置位置,並且對路徑變化不敏感,因爲它全部來自同一個目錄。

+0

鏈接現在看起來已經過期 – 2014-01-23 03:17:47

1

好的。我真的明白,那裏真的沒有「正確」的答案,因爲項目差異很大。這非常依賴於應用程序的性質。

我們的主要構建由許多內部模塊和第三方模塊組成。他們都在獨立的項目管理。這是有道理的,因爲它們在不同的地方使用。

但是,在單個項目中設計多個模塊來設計爲一個完整的應用程序似乎有過於複雜的事情。這兩個模塊的最初原因是爲了在新窗口中打開不同的屏幕時保持URL的簡單。儘管有多個構建目標,但它們都使用了非常大的通用代碼子集(包括自定義XML/POJO編組庫)。

關於大小...對於我們來說,一個模塊是280KB,另一個模塊超過300KB。

剛剛完成將所有事情合併回單一模塊。新的組合模塊大約爲380KB。所以下載實際上會少一點,因爲大多數人都會使用這兩個屏幕。

還記得有完美的緩存,所以380KB應該只下載一次,除非應用程序已更改。

4

從我構建GWT應用程序的經驗來看,在決定是否需要多個模塊(有或沒有入口點)或全部在一個時需要考慮幾件事:下載時間(JavaScript包的大小),編譯時間,導航/ url和可維護性/可重用性。

...每次下載時,代碼拆分幾乎不會因爲性能原因而需要打入不同的模塊。

...每編譯一次,即使是大的應用程序編譯也相當快,但它可能有助於解決大型應用程序的問題。因爲每個模塊都有它自己的客戶端狀態......並且導航並不是無縫的,所以在每個導航/ url中,從一個模塊導航到另一個模塊可能會很痛苦(假設不同的EntryPoints)模塊。

...對於每個可維護性/可重用性,從組織/結構的角度來看,可以將它們分成單獨的模塊(即使只有一個EntryPoint)。

我寫了一篇關於using GWT Modules的博客文章,以防萬一。

相關問題