2013-08-11 2 views
0

Я относительный новичок в разработке GWT. Я унаследовал веб-приложение GWT, которое в настоящее время загружает почти 200 списков GWT ListBoxes с некоторыми данными (~ 20 элементов). Загрузка этих данных происходит очень медленно. Есть ли способ, которым я могу «привязать» все списки ListBox к одному объекту данных, который, в свою очередь, загружается данными? Может ли редактор помочь мне? Я бы предпочел не перепроектировать пользовательский интерфейс, но мне, возможно, придется в случае необходимости.Загрузка 200 GWT ListBoxes медленно

спасибо.

+2

Вы можете посмотреть хронику в своем предпочтительном браузере и подтвердить, где именно происходит замедление? – chrylis

+2

Загрузка 200 itmes в listbox, является наказанием для конечного пользователя. –

ответ

0

Три стратегии, которые я рекомендую для больших форм:

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 
} 
Смежные вопросы