2014-10-19 72 views
0

我正在看的特定情況是在多個UiBinder中使用的客戶端捆綁包。客戶端軟件包包含在ui:with標記中。是否爲每個客戶端生成一個新的客戶端軟件包,如果有的話,性能影響是什麼?ClientBundles如何生成?我應該緩存還是重新創建?

我可以使用@UiField(provided = true)註釋來緩存ClientBundle,這是個好主意嗎?

回答

2

需要完成的任何緩存都是在內部完成的 - 有一些由ClientBundle實現自身生成的靜態成員,以確保在完成某些操作後不需要再次完成。這適用於ImageResource使用以及CssResource.ensureInjected。

將它們用作任何對象的意義 - 編譯器將盡最大努力使最乾淨的代碼成爲可能。如果沒有機會進行動態分派(多個實現或子類),那麼它將重建方法爲靜態方法,如果不需要參考,它將完全編譯「this」的引用。

總之,編寫可讀代碼,編譯器會擔心它。如果您擔心,請使用Chrome中出色的CPU和內存分析工具來比較策略,但如果您發現任何差異,我會很驚訝。

+1

爲了增加科林的觀點,我曾經重組了一個GWT應用程序,這些應用程序多年來變得非常複雜。我通過子類化Activities和View實現消除了超過5,000行的重複代碼,在必要時創建了單例,並且使成員靜態化成爲可能。當我重新編譯應用程序時,我非常驚訝地發現,所有這些明顯的改進都使編譯代碼大小減少了2%,並且沒有明顯的性能改進。 GWT編譯器非常聰明。 – 2014-10-20 05:37:04

相關問題