【发布时间】:2012-09-25 14:43:25
【问题描述】:
我有一个向我发送大量 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有关
- 如果您的单元格表中断但只有几行,那么您做了一些您不会引以为豪的事情
- Scheduler.get().scheduleDeffered 允许您渲染页面,然后执行您的业务逻辑。太酷了。
谢谢大家
【问题讨论】:
-
那么,这 2 分钟花在哪里了:加载数据还是渲染 CellTable?
-
好问题!我怎么能看到? (谢谢)
-
GWT.log("我的数据到达" + new Date());然后是渲染 CellTable 的代码,然后是另一个日志条目以标记渲染完成
-
@AndreiVolgin 说了什么,和/或Chrome Speed Tracer。
-
您的代码中不需要 .getList() :) 您是否在表格中使用任何自定义单元格?您在列中的 getValue() 方法中是否有任何逻辑,这取决于其他列中的值?
标签: gwt gwt-celltable