2012-07-27 63 views
2
許多部件

假設我們已經部件/面板的以下結構GWT應用程序 -管理在GWT

  • 其中用於導航到不同的應用DockLayoutPanel的左側有一個樹形菜單。
  • 在DockLayoutPanel和不同的內容窗口小部件的中心的面板得到裝載在該面板(這是由導航樹菜單控制。
  • 這些內容窗口小部件是含有一個或多個窗口小部件的複合材料。

處理這種應用程序的一種方法是爲所有小部件/面板保留單例,這意味着複合材料將持有所有子小部件的單例,但我認爲這是單例的過度使用;另一種方法是每構建一個新的Widget對象需要一次性的,但這必須是昂貴的。

圍繞這一點的最佳做法是什麼?是否有任何標準模式來處理這個問題?

回答

4

另一種選擇是每次需要構建新的Widget對象,但這必須很昂貴。

你會感到驚訝。雖然Widget的創建不是免費的,但在大多數情況下,即使在DevMode中,它也相當便宜。在DevMode(特別是FlexTable/Grid)中創建的幾個小部件很昂貴,但是一旦編譯應用程序,這些小部件的速度就會大幅提高。

似乎沒有專門針對此的任何模式,我也不能指出任何一位大師給出了最佳實踐,但在我們的應用程序中,我們先前將所有頂級小部件視爲單例,並且它導致了爲我們加載問題。 (管理不同屏幕之間的狀態,處理事件總線事件,未清除時屏幕上的陳舊數據)

我們只是根據需求重構了大部分代碼(並在不再需要時隨後銷燬),我們獲得更簡單的代碼和更快的啓動時間。最後,如果您確實按需創建了小部件,則可能會出現少數情況下需要通過將這些小部件設置爲單例來提高性能,但我認爲您會發現只有少數人會爲此付出努力。總之,不要認爲如果你沒有嘗試過,速度會變慢,也不會預先優化你的代碼。

+0

我們沿用了ActiveGrade的類似路徑,現在按需創建大部分小部件。很棒。如果我要優化交互速度,我的下一個猜測就是創建widgets預先需求 - 但我仍然會避免單例。太複雜。 – 2012-07-27 15:22:26

+3

我完全同意。而且 - 即使在你需要優化的情況下 - 單身並不是答案。相反,請繼續引用您需要在其他對象的字段,列表,地圖或其他內容中重用的小部件。然後確保構建一個非常乾淨的機制,在重新使用它們之前重新初始化這些小部件! – 2012-07-27 16:45:42