如何快速向GWT DataGrid添加许多列

时间:2011-12-16 20:25:25

标签: gwt datagrid

我目前正在尝试创建一个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添加列?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可能想问自己的一个问题是,是否有更好的方法。具有40列(IMO)的表似乎效率低下。一般情况下,在DataGrid中加载超过15列时,您会有明显的性能损失,而FlexTable并不是更好。

我与DataGrid工作了很多,并且没有看到您正在谈论的任何行为,但在我的情况下,他们通常只有10个或更少的列几千行。 (数据当然是分页的,不会同时被卡住。)

我注意到的一件事是加速预渲染。您是在添加所有这些列之前将表添加到DOM,还是先将它们全部添加?可以花费大量时间等待DOM更新。如果您在渲染完所有内容后将其添加到页面中,那么您可能会考虑到您获得的最佳速度,因为没有内置函数可以同时添加多个列。