我为大型表单推荐的三种策略:
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
}