我有一个向我发送大量 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 错误。
外卖虽然:
- 跟踪最后一次调用server-side和onSuccess client-side的第一行,看问题是否与RPC有关
- 如果您的单元格表中断但只有几行,那么您做了一些您不会引以为豪的事情
- Scheduler.get().scheduleDeffered 允许您渲染页面,然后执行您的业务逻辑。所以这很酷。
多谢你们