Как быстро добавить много столбцов в GWT DataGrid - PullRequest
1 голос
/ 17 декабря 2011

В настоящее время я пытаюсь создать 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 Ответ

1 голос
/ 17 декабря 2011

Один вопрос, который вы могли бы задать себе, есть ли лучший способ сделать это. Таблица с 40 столбцами (IMO) кажется неэффективной. В общем, вы будете иметь значительные потери производительности при загрузке более ~ 15 столбцов в DataGrid, а FlexTable не лучше.

Я немного поработал с DataGrid и не видел поведения, о котором вы говорите, хотя в моем случае они обычно имеют только 10 или менее столбцов с несколькими тысячами строк. (Данные, конечно, разбиты на страницы и не защемляются сразу.)

Одна вещь, которую я заметил, ускоряет предварительный рендеринг. Добавляете ли вы таблицу в DOM до добавления всех этих столбцов или сначала добавляете их все? Много времени может быть потрачено на ожидание обновления DOM. Если вы добавляете его на страницу после рендеринга всего, вы, вероятно, смотрите на лучшую скорость, которую вы получите, поскольку нет встроенной функции для добавления нескольких столбцов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...