阻止UI的GWT事件处理程序

时间:2012-08-14 21:07:24

标签: gwt

我是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阻止)?我对任何想法持开放态度。谢谢!

1 个答案:

答案 0 :(得分:0)

在开发者模式下测量项目的速度可能是这种极端缓慢的原因。

如果将应用程序部署到应用程序服务器,或者从devmode中的url末尾删除&gwt.codesvr=127.0.0.1:9997部分,则可以查看应用程序的实际速度。