我是GWT的新手。我创建了一个基于MVP的项目(如here所述),它使用了许多自定义事件。有几个小部件(10+)监听一些全局事件并在事件处理程序中执行一些操作(包括写入DOM)。
我发现UI阻止并且直到一个事件的每个处理程序完成处理才更新。这导致UI在页面加载和导致窗口小部件更新的任何其他事件上执行缓慢。
我在普通的JavaScript / jQuery中创建了一个类似的项目,这不是该项目的问题。事实上,用户界面非常快。我在这做错了什么?文档指出GWT非常高效,因此我必须得出结论,我只是做错了。
一个例子,我有一个选择日期预设的下拉菜单(如昨天或上周)。发生这种情况时,我会在模型中设置所选的预设,如下所示:
public void setDateRange(DatePreset dateRange) {
this.dateRange = dateRange;
eventBus.fireEvent(new DateChangedEvent(dateRange));
}
每个小部件都可以访问相同的事件总线并注册到处理程序DateChanged事件。每个小部件都需要做大量的逻辑和处理(包括进行ajax调用),然后用正确的数据更新自己。
@Override
public void onDateChanged(DateChangedEvent event) {
DatePreset dateRange = event.getDate();
… additional processing and logic
… ajax call
}
经过一些基本的分析后我确定每个小部件需要大约100-150ms来完成处理(这意味着UI延迟超过一到两秒)。当我说阻止时,我的意思是我选择日期预设的下拉菜单甚至没有关闭(我看到旋转轮)直到一切都完成。
我可以做些什么来使这个运行更快(并且没有UI阻止)?我对任何想法持开放态度。谢谢!
答案 0 :(得分:0)
在开发者模式下测量项目的速度可能是这种极端缓慢的原因。
如果将应用程序部署到应用程序服务器,或者从devmode中的url末尾删除&gwt.codesvr=127.0.0.1:9997
部分,则可以查看应用程序的实际速度。