我是 GWT 的新手。我创建了一个基于 MVP 的项目(如此处所述),它使用了许多自定义事件。有几个小部件(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-150 毫秒才能完成处理(这意味着 UI 延迟超过一到两秒)。当我说阻塞时,我的意思是我选择日期预设的下拉菜单甚至不会关闭(我看到旋转轮),直到一切完成。
我该怎么做才能让它运行得更快(并且没有 UI 阻塞)?我对任何想法持开放态度。谢谢!