我在使用GWT请求工厂时观察到了非常糟糕的性能。例如,一个需要我的服务层2秒才能完成的请求要花20秒来序列化GWT。我的服务是返回~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和GWT2.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;
}我的问题是:
发布于 2012-10-22 10:14:23
RequestFactory大量使用反射(例如,比GWT多得多),所以在某些情况下它会引起一些perf问题,我并不感到惊讶。GAE可以在这里扮演一个角色。
我相信RequestFactory (实际上是AutoBean部分)可以从构建时的代码生成中获益良多。
检查定位器的find和/或isLive方法。
她还想知道用于反序列化请求、应用更改、然后序列化响应所花费的时间。不要忘记从这些时间中减去在find和isLive中花费的时间。
https://stackoverflow.com/questions/12977922
复制相似问题