Повторение команды в gwt - PullRequest
       22

Повторение команды в gwt

2 голосов
/ 10 декабря 2011

Я использую гибкую таблицу, чтобы показать данные, полученные из БД. Когда таблица содержит большое количество столбцов, требуется много времени для рендеринга гибкой таблицы (я тестировал ее на таблице с 80 столбцами и 38 строками), и хотя она не полностью отрисована, я ничего не могу сделать со страницей. Поэтому я использую Schedule.get().scheduleIncremental(ReapitingCommand command) следующим образом:

final int  WORK_CHUNK = 2;    
Scheduler.get().scheduleIncremental(new RepeatingCommand() {
            int rowCounter = 0;

            @Override
            public boolean execute() {
            for (int i = rowCounter; i < rowCount; i++, rowCounter++) {
                for (int j = 0; j < columnCount; j++) {
                table.setText(i, j, data.get(i)[j]);
                }
                if (rowCounter % WORK_CHUNK == 0)
                return true;
            }
            return false;
            }
        });

Но если у меня есть 9 строк и 3 столбца в data объекте, он рендерит только 2 строки. Как я могу улучшить его производительность, потому что, как я уже говорил ранее, если есть 38 строк и 80 столбцов, требуется слишком много времени для визуализации всех данных без scheduleIncremental. Даже браузер открывает окно, в котором скрипт может перестать отвечать.

Ответы [ 2 ]

2 голосов
/ 05 июня 2013

Для приведенного выше кода я бы сделал это так. Избавьтесь от первого цикла for, потому что execute () является рекурсивным.

Scheduler.get().scheduleIncremental(new RepeatingCommand() {
    int rowCounter = 0;
    int rowCount = 10;

@Override
public boolean execute() {

// do some work
    for (int j = 0; j < columnCount; j++) {
    table.setText(i, j, data.get(i)[j]);
}

rowCounter++;

if (rowCounter >= rowCount)
    return false;

return true;
   }
});
2 голосов
/ 10 декабря 2011

Почему бы не использовать CellTable вместо FlexTable для визуализации ваших данных?
Предполагается, что CellTable гораздо более эффективен при отображении больших объемов данных по сравнению с FlexTable.

...