我注意到使用GWT requestfactory时性能非常差。例如,我的服务层需要2秒钟才能完成的请求,GWT需要20秒才能序列化。我的服务返回大约100个将成为EntityProxies的对象。每个对象都有将成为4个ValueProxies和2个其他EntityProxies(100个根级EntityProxies,400个ValueProxies和200个额外的EntityProxies)。但是,我在较小的数据集上看到了相同的10倍性能降级。
日志片段示例:
日志片段示例:
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上,但我不认为这里起作用。
我发现针对2.4提出了此错误,似乎与此密切相关。 我手动应用了来自此 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序列化代码进行分析,以尝试找出原因?