加载200 GWT ListBoxes很慢

时间:2013-08-11 13:25:04

标签: java performance gwt listbox

我是GWT开发的新手。我继承了一个GWT网络应用程序,它当前加载了近200个GWT ListBoxes和一些数据(约20项)。加载此数据非常慢。有没有办法可以将所有ListBox绑定到一个数据对象,而后者又加载了数据?编辑框架会帮助我吗?我不想重新设计用户界面,但如果有必要,我可能不得不这样做。

谢谢。

1 个答案:

答案 0 :(得分:0)

我推荐用于大型表格的三种策略:

1 *使用延迟执行来保持UI响应。

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)

如果列表框内容始终相同,您可以使用SafeHtml或Html模板直接生成HTML并将其传递给列表框。这是和将生成按钮代码的示例。我从来没有专门用它来提高性能,但我想它会更快。

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
}