在使用GWT requestfactory時,我觀察到性能很差。例如,一個將我的服務層2秒傳遞給fullfil的請求將GWT花費20秒來序列化。我的服務正在返回〜100什麼是EntityProxies。這些對象中的每一個都有4個ValueProxies和2個EntityProxies(100個根級別的EntityProxies,400個ValueProxies和200個額外的EntityProxies)。但是,我發現在更小的數據集上性能下降了10倍。日誌片斷的GWT Requestfactory性能建議
實施例:
D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
我已經添加了一些配置代碼到ServiceLayerDecorator#invoke
方法和包裹在一個定時器的整個的servlet。我已經自己介紹了這項服務,它的確在2秒內返回結果。
我使用GWT 2.4,但已經測試了這個在GWT 2.5rc1和GWT 2.5rc2。我的後端在GAE上,但我不認爲這是在這裏扮演的角色。
我發現this bug針對2.4,這似乎是非常相關的申請。沒有任何運氣,我手動應用了this google group的修補程序。
我的域模型的樣子:
class Trip {
protected Address origin; // becomes ValueProxy
protected Address destination; becomes ValueProxy
protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}
class TripPassenger {
protected Passenger passenger;
}
class Passenger {
protected Account account;
}
我的問題是:
- 我有異形正確的代碼,並找出問題的GWT序列化?
- 我可以做一些會導致這種行爲的錯誤嗎?
- 我該如何更好地分析GWT序列化代碼以試圖找出原因?
我認爲你的數據結構太複雜了。試着壓扁它。你再解釋一下,你的DTO是怎樣的?你使用AutoBean嗎? –
我在該問題中添加了部分域模型。在一些更昂貴的那些中,這是正在加載的圖形。您是否有任何關於數據結構太複雜的參考?什麼是複雜的(大小或關係)?對我來說,任何商業應用程序似乎都是合理的。我已經開始關注AutoBean,並且正在考慮從服務器返回JSON。 – Brad
我剛剛分析了加載〜10個EntityProxies(沒有ValueProxy或嵌套關聯)的請求。服務層花費了1秒,但GWT序列化花費了3秒多。 – Brad