0

I'm a relative newbie to GWT development. I've inherited a GWT web app that currently loads almost 200 GWT ListBoxes with some data (~20 items). Loading this data is very slow. Is there a way I can "bind" all of the ListBoxes to one data object which in turn is loaded with the data? Would the Editor framework help me out? I'd prefer not to redesign the UI but I may have to if necessary.

Thank you.

4

1 回答 1

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
}
于 2013-08-12T07:49:46.737 回答