java - GWT:使用 RPC 从数据存储填充页面太慢

标签 java google-app-engine gwt gwt-rpc

有没有一种方法可以使用从数据存储加载的数据生成的 GWT UI 元素来加快页面的填充速度?我可以避免在加载页面时进行不必要的 RPC 调用吗?

有关我遇到的问题的更多详细信息: 有一个页面,我在该页面上生成了一个表,其中包含从数据存储加载的实体列表的名称和按钮。该页面有一个 EntryPoint,在它的 onModuleLoad() 中我做了这样的事情:

final FlexTable table = new FlexTable();

rpcAsyncService.getAllCandidates(new AsyncCallback<List<Candidate>>() {
    public void onSuccess(List<Candidate> candidates) {
       int row = 0;
       for (Candidate person : candidates) {
          table.setText(row, 0, person.getName());
          table.setWidget(row, 1, new ToggleButton("Yes"));
          table.setWidget(row, 2, new ToggleButton("No"));
          row++;
       }
    }
    ...
});

这可行,但需要 30 多秒才能加载包含 300 名候选人的按钮的页面。这是 Not Acceptable 。

应用在 Google App Engine 上运行并使用应用引擎的数据存储区。

最佳答案

你可以做很多事情,我会按顺序列出它们,这会给你带来最好的影响。

  1. FlexTable 不适用于 300 行。由于您的表非常简单,您应该考虑手动生成 HTML,然后使用简单的 HTML 小部件。此外,300 行的信息很多 - 考虑使用分页。 DynaTable sample app向您展示如何执行此操作。
  2. 您似乎每页使用一个 GWT 模块。这是错误的 GWT 方法。加载 GWT 模块有一些不小的成本。要理解我的意思,请比较 gmail 上的浏览​​器刷新与 gmail 提供的刷新链接。这与您网站上的每个页面都有不同的 GWT 模块时支付的费用相同。
  3. 如果跨 View 需要候选人列表,您可以将其作为 JSON 对象与 HTML 一起发送,然后使用 Dictionary class在 GWT 中阅读它。这会节省您正在进行的 RPC 调用。仅当数据对多个 View /屏幕有用(例如登录用户信息)时才推荐使用此方法
  4. 检查您的 RPC 方法调用花费了多长时间。您可以启用 stats in GWT找出您的应用程序在哪里花费时间。
  5. 您还可以运行 Speed Tracer以确定瓶颈在哪里。这是最后一个,因为很明显 FlexTable 正在执行大量 DOM 操作。一般来说,如果您不知道从哪里开始,Speed Tracer 是一个很棒的工具。

关于java - GWT:使用 RPC 从数据存储填充页面太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754035/

相关文章:

google-app-engine - GAE任务队列如何做出延迟?

google-app-engine - GAE Apache Maven 插件的配置标签说明

java - SmartGwt:添加迄今为止的天数

eclipse - 安装Maven Integration for Eclipse WTP时出错

ruby-on-rails - 如何保持 Ruby on Rails 混合集群和 Tomcat 服务器之间的 session ?

java - PKIX 路径构建失败,但证书在 cacerts 中

java - AppEngine(Java)中cron作业的复杂时间表

java - Play Framework 2.1.1 部署问题

java - 在 Tomcat 网络应用程序中提供静态内容

Python 不解释已更改的文件,使用过时的 .pyc