我发现使用 GWT requestfactory 时性能非常糟糕。例如,一个请求需要我的服务层 2 秒才能完成,而 GWT 则需要 20 秒才能序列化。我的服务返回约 100 个实体代理。这些对象中的每一个都有 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 上,但我认为这在这里不起作用。
I found this bug http://code.google.com/p/google-web-toolkit/issues/detail?id=7231针对 2.4 提交,这似乎非常相关。我已经手动应用了补丁这个谷歌群组 https://groups.google.com/forum/?fromgroups=#!topic/google-web-toolkit/o4qBbwmE7YA没有任何运气。
我的域模型如下所示:
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 序列化代码以尝试找出原因?
- 我是否正确分析了代码并将问题隔离到 GWT 序列化?
RequestFactory使用反射一大堆(例如比 GWT-RPC 多得多),所以我对它在某些情况下导致一些性能问题并不感到惊讶。 GAE 可以在这里发挥作用。
我相信 RequestFactory(实际上是 AutoBean 部分)可以从构建时的代码生成中受益匪浅。
检查您的定位器find
and/or isLive
方法。
- 如何更好地分析 GWT 序列化代码以尝试找出原因?
了解反序列化请求、应用更改以及序列化响应所花费的时间也很有趣。并且不要忘记减去花费的时间find
and isLive
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)