对象列表的 GWT 请求工厂性能错误

2022-09-01 19:34:26

我正在使用GWT请求工厂将对象列表传输到客户端。对象仅包含几个字符串,列表仅包含 20 个对象。要传输这个小数据列表,需要一秒钟多的时间。首先,我认为查询需要优化。但测量结果显示:

从数据库中检索对象只需

300ms

转移到客户总共需要一秒钟以上

1136ms

因此,这似乎是请求工厂开销。我已经使用我自己的函数并覆盖了该函数,因此它始终返回。我还可以采取任何其他措施来加快速度并将性能提升到可接受的区域吗?ServiceLayerDecoratorisLive()true

更新:

我创建了将实体对象数据复制到 DTO 的逻辑,并使用 RPC 传输它们,以比较 RPC 和请求工厂性能。如您所见,RPC 逻辑要快得多。现在我想知道这是设计使然,还是我的应用程序中存在缺陷。

20 个传输的对象:

Request factory: 1252 ms

RPC: 420 ms

28 个传输的对象:

Request factory: 1654 ms

RPC: 460 ms

78 个传输的对象:

Request factory: 3963 ms

RPC: 769 ms

============================================================

更新2

因此,我编写了一个非常简单的示例应用程序,以确保我的应用程序没有任何过滤器或其他干扰组件。应用程序从服务器加载 10 个对象和 4 个字符串字段。我用请求工厂和RPC做了这件事,并停止了时间。

代码可以在这里找到:https://github.com/jan10101/requstFactoryVSRPC

此处的生活演示:http://requestfactorytest.appspot.com/

测试应用程序证实了我的观察:与 RPC 性能相比,请求工厂的性能确实很差。在开发模式下,RPC的性能大约提高了40倍,在生产模式下仍然是4倍。我是第一个注意到性能问题的人吗?

以下屏幕截图显示了测试结果(如果您不想自己尝试)。

开发模式下的结果:

enter image description here

生产代码的结果(在应用引擎上):enter image description here


答案 1

我不确定这与您的具体情况有多相关,但问题可能是AutoBeans。RequestFactory广泛使用AutoBeans。

我最近能够通过减少AutoBeans的使用来解决GWT应用程序中的性能问题,这似乎非常慢。使用分层性能探查器(如 IE 的 F12 工具中的分析器)将 Autobean 代码标识为问题的根源,因此性能问题是客户端。IIRC的解决方案是在调用完成后将AutoBeans复制到“真正的”Java对象。


答案 2

推荐