我有一个服务器端服务,可以向我发送巨大的 DTO。我需要将它们放在 CellTable 中。
就像 10-200 行,我需要同时查看所有内容。

我有一个服务器端日志,它跟踪我的服务的最后一行“人造”代码(就在返回之前)。

最好的情况是,此日志与完全加载的表之间有 2 分钟的间隔。大多数时候,在这个过程中有些东西会中断,这让我很不自在。

我有哪些选择?

谢谢

编辑 :
我尝试了Andrei的想法,区分数据下载(rpc回调)的长度和celltable加载的长度。

我想确定一下,这就是我在回调中所做的:

@Override
public void onSuccess(ResponseBean result) {
  Window.alert("success " + new Date().toString());

  resultPanel.updateResults(result);

  Window.alert("celltable " + new Date().toString());
}

第一个警报在约 10 秒后发生。但第二个从未被调用。

这是 updateResults 背后的方法:
public void updateResults(ResponseBean response) {
  dataProvider.getList().clear();
  dataProvider.getList().addAll(response.beans());
  myCellTable.setPageSize(response.beans.size());
}

编辑 2:
我尝试了很多东西。当我尝试用我的数据填充单元格表时会出现问题。
在 Chrome 中,出现 BSOD 的 chrome 版本。在 Firefox 中,它会静默中断,但不会执行剩余的 js 指令。
如果我尝试在 firebug 中读取控制台,我的 firefox 会使用 ~2.5GB ram 卡住。如果我使用 gwt-runner,它也会卡住。

在我的示例中,只有 4 行(4 个具有多个依赖项的对象)!

我怎样才能找到什么中断和哪里?

谢谢你的帮助:)

最后 :
好吧,所以我显然是个白痴。在 getValues() 的某处有一段不应该存在的“业务逻辑”,这导致了 OutOfMemory 错误。

不过方法是:
  • 跟踪上次调用服务端和onSuccess客户端第一行,看问题是否与RPC相关
  • 如果你的 celltable 坏了,但只有几行,你做了一些你不会为
  • 感到自豪的事情
  • Scheduler.get().scheduleDeffered 允许您呈现页面,然后执行您的业务逻辑。所以这很酷。

  • 谢谢你们

    最佳答案

    通常我会把钱押在 RPC 序列化是瓶颈而不是 CellTable 渲染上。
    但是,您是说第一个警报在 10 秒后出现,这与此相反。

    使用 CellTable 渲染 200 个 DTO 应该足够快。
    此外,通过网络发送 200 个 DTO 应该没有问题。

    我使用了 CellTable 并通过线路发送了大约 5000 个 DTO,没有任何性能问题(尽管我一次只显示 50 个并使用分页)。

    一些想法:

  • 开发模式比生产模式慢得多(特别是在反序列化方面)。所以也在生产模式下测试性能。
  • 要找出问题的确切原因,请使用 Chrome Dev Tools。您可以分析您的代码并查看导致延迟的原因。
  • 您能否在您的代码中手动创建 200 个 Dummy DTO,并将其传递给您的 updateResults 函数并查看性能比较。
  • 显示多少列?如果您显示多列,请将其减少到只有一列,看看它如何影响性能。
  • 在 CellTable 列中使用的任何 getter 是否具有昂贵的业务逻辑?
  • 关于Gwt 性能问题 : huge data and celltable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12585408/

    10-12 17:24