我目前正在尝试创建一个DataGrid,它可以将一个值列表的实体作为一行。列表中的每个值都位于DataGrid中的自己的列中。实体的值列表可能具有不同的大小,因此DataGrid将具有可变数量的列。我注意到当我尝试创建DataGrid并循环遍历将每个列添加到DataGrid的过程时,添加列所花费的时间不会线性增长。
以下是我用来测试添加列的快速性的代码
DataGrid<String> table = new DataGrid<String>();
table.setPageSize(25);
int NUM_COLUMNS = 40;
for (int i = 0; i < NUM_COLUMNS; i++) {
GWT.log("Adding column "+i);
TextColumn<String> nameColumn = new TextColumn<String>() {
public String getValue(String object) {
return object;
}
};
table.addColumn(nameColumn, "Column " + i);
table.setColumnWidth(nameColumn, 100, Unit.PX);
}
ArrayList<String> data = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
data.add("row "+i);
}
table.setRowCount(data.size(), true);
table.setRowData(0, data);
table.setWidth("100");
每次运行它需要大约48秒,给予或需要1秒钟。似乎加载少于10列的速度相当快,但随着列数的增加,加载它的时间呈指数级增长。
是否有另一种方法可以更快地向DataGrid添加列?提前谢谢。
答案 0 :(得分:1)
您可能想问自己的一个问题是,是否有更好的方法。具有40列(IMO)的表似乎效率低下。一般情况下,在DataGrid
中加载超过15列时,您会有明显的性能损失,而FlexTable
并不是更好。
我与DataGrid
工作了很多,并且没有看到您正在谈论的任何行为,但在我的情况下,他们通常只有10个或更少的列几千行。 (数据当然是分页的,不会同时被卡住。)
我注意到的一件事是加速预渲染。您是在添加所有这些列之前将表添加到DOM,还是先将它们全部添加?可以花费大量时间等待DOM更新。如果您在渲染完所有内容后将其添加到页面中,那么您可能会考虑到您获得的最佳速度,因为没有内置函数可以同时添加多个列。