1

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

4

1 回答 1

0

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

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

于 2012-08-15T09:59:15.737 回答