使用 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 包装在一个计时器中。我已经对服务本身进行了分析,它确实在~2s 内返回了结果。
我正在使用 GWT 2.4,但在 GWT 2.5rc1 和 GWT 2.5rc2 上对此进行了测试。我的后端在 GAE 上,但我不认为这在这里发挥了作用。
我发现这个错误是针对 2.4 提交的,这似乎非常相关。我已经手动应用了这个谷歌组的补丁,没有任何运气。
我的域模型如下所示:
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 序列化代码以尝试找出原因?