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