2013-01-16 114 views
1

我有一個關於RequestFactory和GWT的性能的問題。我有一個帶有8個字段的域實體,返回大約1000個EntityProxies。請求觸發和響應之間的時間約爲20秒。我也這樣做,但返回10個EntityProxies,時間是17秒,幾乎相同。GWT RequestFactory性能

這是因爲我在開發模式下工作,或者當我將代碼發佈到網絡的時間將是相同的?

有什麼方法可以提高性能嗎? ,我只是在閱讀數據,所以也許只有閱讀和不寫的東西可能是解決方案?

我看到這篇文章有類似我的問題了一句:

GWT Requestfactory performance suggestions

非常感謝。

PD:我在某處讀過一個解決方案可能是在服務器中創建一個xml,將它發送到客戶端並在那裏重新創建對象,我不想這樣做,因爲它會真的改變我的設計應用程序。

回答

0

GWT中的性能分析和修復問題非常棘手。避免在GWT託管模式下進行所有分析。他們不代表任何有用的東西。

您只能在WEB模式下配置文件。

GWT RequestFactory通過設計比GWT RPC和GWT JSON等,這是關閉w.r.t GWT RF來計算增量和僅發送少量信息到服務器上保存能力的貿易慢。

您應該重新檢查應用程序設計以避免加載1000個代理。 RF意味着像「表格」一樣的應用程序。您可能需要1000個代理的唯一原因是網格顯示。您可能可以在該場景中使用分頁的異步網格。

0

你應該配置您的應用程序,以找出多少時間花在以下步驟:從數據庫(服務器)檢索

  1. 實體:這可以通過使用二級緩存來改善和優化查詢
  2. 實體序列化到JSON(服務器):有一個開銷,因爲這裏RequestFactoryAutoBean分別依靠反射。您可以嘗試僅傳輸您也要在客戶端上顯示的實體。這大大降低了延遲的另一個優化是重寫你的EntitiyLocatorisLive方法,並從服務器返回真正
  3. HTTP請求發送到客戶端tranmit數據(線):您可以考慮使用gzip壓縮,以減少必須傳輸的數據量(如果通過線路發送大量對象,則是很重要的)。
  4. 客戶端(客戶端)的反序列化:這應該是相當快的。有一個基準測試表明,AutoBean序列化是序列化JSON的最快方法之一。再次,這將受益於不通過電線發送整個對象圖。

提高性能的一種方法是使用緩存。您可以使用HTML5 localstorage在客戶端上緩存數據。這特別適用於不經常更改的數據。

1

謝謝大家的幫助,我現在意識到可能使用Request Factory來檢索數千條記錄是一個錯誤。

我最初使用一個定位器根據該交重寫將isLive()和查找()的方法: gwt-requestfactory-performance-suggestions

的響應時間縮短到約13秒,但它仍然太高。

但我很容易解決它。我創建了一個新的數據庫表,其中每個字段都具有由分隔符連接的所有相同字段記錄(1000+)(每個數據庫字段的長度約爲10000),並且表中只有一條記錄大約8個領域。

事情是這樣的:

Field1   |   Field2   |   Field3   

Field1val; Field1val; Field1val; ....... | Field2val; Field2val; Field2val; ...... | Field3val; Field3val; Field3val; ......

我通過RequestFactory將這一條記錄返回給我的客戶端,它大大降低了速度!大約1秒。我在客戶端解析這個大的字符串,其持續時間約爲500毫秒。所以現在不用浪費大約20秒鐘,完成相同的過程大概需要1-2秒。

順便說一句,我只是顯示信息,沒有必要插入,刪除或更新記錄,所以這個解決方案適合我。

想我可以分享這個解決方案。