为什么GWT中的多个RPC调用会显着缩短响应时间?

时间:2011-02-09 17:44:00

标签: java performance gwt rpc

我正在测试Google Web Toolkit应用程序,并且遇到多个RPC调用的性能问题。该应用程序的结构是:

  • 用户提交查询
  • 初始查询由单个服务器端servlet提供服务
  • 收到初始回复后,随后通过迭代每个组件并调用更新方法来更新多个组件,并将初始查询的结果传递给
  • 除了可能调用其他服务器端服务
  • 之外,每个组件的更新方法都会对传递给它的数据进行一些处理。
  • 这些调用成功后,组件将在UI中更新。

使用初始查询服务和1个组件(有效地顺序运行),响应时间很快。但是,添加任何其他组件(例如初始查询服务+2个组件,这两个组件异步调用)会极大地影响响应时间。

有没有办法改善/纠正这个问题?

示例:(IQS =初始查询,C1 =组件1,C2 =组件2,C1S =组合1服务,C2S =组件2服务)

Initial Query + 1 component

IQS, returned - propagating results, 1297273015477
C1, Sending server request,1297273015477
C1S, Sending back..., 1297273016486
C1, Receiving Complete, 1297273016522 (total time from initial call - 1045ms)

Initial Query + 2 components

IQS, returned - propagating results, 1297272667185
C1, Sending server request,1297272667185
C2, Sending server request,1297272668132
C1S, Sending back..., 1297272668723 
C2S, Sending back..., 1297272669371
C1, Back at client to process, 1297272671077 (total time from initial call - 3892ms)
C2, Back at client to process, 1297272674518 (total time from initial call - 6386ms)

提前致谢。

4 个答案:

答案 0 :(得分:1)

我认为你需要让你的分析更精细:在提供的数据中你已经确定客户端启动了第二个组件调用并在6386ms后得到了响应。其中一些是

  1. 越过电线
  2. 在服务器上收到
  3. 在服务器上处理(这也可以分解)。
  4. 通过电汇发回。
  5. GWT-RPC服务实际上只与1和4有关。你知道每个步骤需要多长时间吗?

答案 1 :(得分:0)

好吧,我认为你的问题与GWT没有直接关系。因为,我同时使用了多个rpc调用,我的应用程序性能没有下降。我认为你可能有服务器端同步问题。

答案 2 :(得分:0)

带有cookie的http的开销,以及其中一些的排序(而不是在用户切换到应用程序的另一部分时触发所有请求)是他们似乎放慢速度的部分原因。例如。用户请求页面,一旦该页面的小部件就位,他们就会发出他们应该显示的数据的请求,可能会根据该数据决定添加更多小部件(但希望将数据传递到这些小部件中)。 p>

您可能正在寻找一些工具来帮助您创建批量的rpc调用,例如:gwt-dispatch。我认为没有什么是自动的。

答案 3 :(得分:0)

获取更多信息的低技术方法是将基本计时日志记录到每个RPC中,以查看它们需要多长时间。在顶部创建一个新的Date(),从最后的新Date()的ms中减去它的ms,将其打印到stdout或使用Log.info()或其他。

对于更具工业实力的东西,我使用了“SpringSource tc”与Chrome的Speed Tracer结合使用,以获得完整的堆栈视图,了解哪些调用占用了多少时间,以及实际上可以并行执行的操作。设置起来并非易事,但是一旦我做到了,我就能够很快地解决真正的问题(在我的情况下,它会从Hibernate查询中获取大量不必要的信息)。

以下是我们使用的基本信息:

下载tc Server Developer Edition(免费) http://www.springsource.com/products/tc-server-developer-edition-preview

注意:甚至不要考虑在具有空格的目录结构中进行安装.....

安装tc服务器:主要步骤 http://static.springsource.com/projects/tc-server/2.1/getting-started/html/ch06s02.html#install-developer-edition

在Google Speed Tracer中查看Spring Insight数据 http://static.springsource.com/projects/tc-server/2.0/devedition/html/ch04s04.html

url现在是localhost:8080,而不是其他安装tomcat的旧端口地址。

还有一个细节,你需要创建一个.war文件并将其部署到tomcat目录。 (您没有在开发模式下获取perf数据,而是获取本地GWT编译版本)

- Andrew @ learnvc.com