Существует ли способ ускорить население страницы с элементами UI GWT, которые сгенерированы от данных, загруженных из хранилища данных? Я могу постараться не делать ненужный вызов RPC, когда страница загружается?
Больше деталей о проблеме я испытываю: существует страница, на которой я генерирую таблицу с именами и кнопками для списка объектов, загруженных из хранилища данных. Существует EntryPoint для страницы, и в ее onModuleLoad () я делаю что-то вроде этого:
final FlexTable table = new FlexTable();
rpcAsyncService.getAllCandidates(new AsyncCallback<List<Candidate>>() {
public void onSuccess(List<Candidate> candidates) {
int row = 0;
for (Candidate person : candidates) {
table.setText(row, 0, person.getName());
table.setWidget(row, 1, new ToggleButton("Yes"));
table.setWidget(row, 2, new ToggleButton("No"));
row++;
}
}
...
});
Это работает, но занимает больше чем 30 секунд для загрузки страницы кнопками для 300 кандидатов. Это недопустимо.
Приложение работает на Google App Engine и использует хранилище данных механизма приложения.
Вы могли бы сделать много вещей, я просто перечислю их в порядке, который даст вам лучший эффект.
FlexTable
не предназначен для 300 строк. Поскольку ваша таблица настолько проста, вам следует подумать о генерации HTML вручную, а затем использовать простой виджет HTML. Кроме того, 300 строк - это много информации - подумайте об использовании пагинации. Пример приложения DynaTable показывает, как это сделать. Здесь важно то, как вы получаете список кандидатов, который вы не показали. 30 секунд - это очень много, и маловероятно, что это связано только с хранилищем данных.
Вы пробовали использовать appstats для профилирования своего приложения?
Как Шри предложил - разбиение на страницы является самым простым и (я думаю) лучшим решением (вместе с переключением на Ваша проблема в том, что каждый раз, когда вы добавляете что-то в FlexTable, он должен повторно отображать всю страницу и перерисовывать. Попробуйте создать новый FlexTable, заполнить его, когда он будет полностью заполнен, избавьтесь от старого и поместите туда новый. Grid
или просто
). Но если вы по какой-то причине хотели показать / отрисовать много строк одновременно, в проекте GWT Incubator есть хорошая вики-страница об этом - вместе с некоторыми тестами, показывающими, как
FlexTable
отстой при большом количестве строк. Посмотрите также их другие таблицы ;)
Похожие вопросы: