我是GWT的新手。我创建了一个基于MVP的项目(如here所述),它使用了许多自定义事件。有几个小部件(10+)监听一些全局事件并在事件处理程序中执行一些操作(包括写入DOM)。GWT事件处理程序阻止UI
我在找的是UI阻塞并且不会更新,直到一个事件的每个处理程序完成处理。这会导致用户界面在页面加载时以及导致小部件更新的任何其他事件中执行得很慢。
我在普通的JavaScript/jQuery中创建了一个类似的项目,这不是该项目的问题。事实上,用户界面非常快速。我在这里做错了什么?该文档指出,GWT非常高效,所以我必须得出结论,我只是做错了。
一个例子,我有一个下拉菜单选择日期预设(如昨天或上周)。当发生这种情况我设置了选择的预设模型像这样:
小部件的public void setDateRange(DatePreset dateRange) {
this.dateRange = dateRange;
eventBus.fireEvent(new DateChangedEvent(dateRange));
}
每个人都有机会获得同样的eventbus并注册到处理器DateChanged事件。每个小部件都需要执行相当数量的逻辑和处理(包括进行ajax调用),然后使用正确的数据更新自身。
@Override
public void onDateChanged(DateChangedEvent event) {
DatePreset dateRange = event.getDate();
… additional processing and logic
… ajax call
}
我之后每个插件需要大约100-150ms完成处理(这意味着有超过一到两秒的UI延迟)的一些基本分析确定。当我说阻挡时,我的意思是选择日期预设的下拉菜单甚至没有关闭(并且我看到了棘爪轮),直到所有内容完成。
我该怎么做才能让这个运行更快(并且不会阻塞UI)?我愿意接受任何想法。谢谢!
你在'生产模式'中运行吗? '开发者模式'?你使用的是哪个版本的GWT?尝试更精确的分析器,例如'SpeedTracer'。可能有一千个原因。 – 2012-08-15 09:33:50