Bra*_*rad 10 gwt gwt2 requestfactory
在使用GWT requestfactory时,我观察到非常糟糕的性能.例如,将我的服务层花费2秒到fullfil的请求将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
Run Code Online (Sandbox Code Playgroud)
我在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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
- 我是否正确分析了代码并将问题隔离到 GWT 序列化?
RequestFactory大量使用反射(例如比 GWT-RPC 多得多),因此我对它在某些情况下导致一些性能问题并不感到惊讶。GAE 可以在这里发挥作用。
我相信 RequestFactory(实际上是 AutoBean 部分)可以从构建时的代码生成中受益匪浅。
- 我是否做错了什么会导致这种行为?
检查您的定位器find和/或isLive方法。
- 如何更好地分析 GWT 序列化代码以尝试找出原因?
了解请求反序列化、应用更改以及响应序列化所花费的时间也很有趣。并且不要忘记减去在find和中花费的时间isLive。