Три стратегии, которые я рекомендую для больших форм:
1 * использование отложенного выполнения, чтобы сохранить пользовательский интерфейс отзывчивый.
2 * предварительно загрузите представление как можно скорее.
3 * Использование HTML шаблонов или safeHtml
1)
private void setListBoxValues(final Map<String, String> theValues) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
clear();
for (Entry<String, String> entry : theValues.entrySet()) {
box.addItem(entry.getValue(), entry.getKey());
}
}
});
}
2)
Если пользователь должен пройти через некоторые страницы перед выходом в форме, вы можете уже создайте свое представление (используя new ...()) и вызовите метод, который загружает ваши списки, прежде чем они действительно будут отображаться. Для некоторых наших представлений мы даже предварительно загружаем их во время входа в систему, поэтому отображение их пользователю близко к «немедленному».
Еще одна вещь, которую я делаю, когда какая-то страница/виджет, чтобы появиться на компьютере с неизвестной ошибкой, - это создать стек предустановленных представлений/виджетов и передать их моему докладчику по запросу. Затем ведущий может отобразить их немедленно.
3)
Если содержание ListBox всегда то же самое вы можете использовать SafeHtml или Html шаблоны непосредственно генерировать HTML и передать его своим ListBoxes. Вот и пример, который будет генерировать код для кнопки. Я никогда не использовал его специально для улучшения характеристик, но, думаю, это будет быстрее.
protected interface Templates extends SafeHtmlTemplates {
@SafeHtmlTemplates.Template("<button type=\"button\" value=\"{0}\" tabindex=\"-1\">{1}</button>")
SafeHtml button(String value, String label);
}
private static Templates templates = GWT.create(Templates.class);
public void render() {
SafeHtml rendered = templates.button("myValue", "myLabel");
// ... then inject HTML in some HTMLPanel
}
Вы можете посмотреть хронику в своем предпочтительном браузере и подтвердить, где именно происходит замедление? – chrylis
Загрузка 200 itmes в listbox, является наказанием для конечного пользователя. –