GWT事件处理程序阻止UI
我是GWT的新手。我正在创建一个基于MVP的项目(如上所述),该项目使用许多自定义事件。有几个小部件(10+)侦听一些全局事件,并在事件处理程序中执行一些操作(包括写入DOM) 我发现UI会阻塞,直到每个事件的处理程序都完成处理后才会更新。这会导致UI在页面加载和导致小部件更新的任何其他事件时执行缓慢 我在纯JavaScript/jQuery中创建了一个类似的项目,这不是该项目的问题。事实上,UI的速度非常快。我做错了什么?文档说明GWT的性能非常好,因此我必须得出结论,我只是做错了 例如,我有一个下拉列表,用于选择日期预设(如昨天或上周)。发生这种情况时,我在模型中设置所选预设,如下所示:GWT事件处理程序阻止UI,gwt,Gwt,我是GWT的新手。我正在创建一个基于MVP的项目(如上所述),该项目使用许多自定义事件。有几个小部件(10+)侦听一些全局事件,并在事件处理程序中执行一些操作(包括写入DOM) 我发现UI会阻塞,直到每个事件的处理程序都完成处理后才会更新。这会导致UI在页面加载和导致小部件更新的任何其他事件时执行缓慢 我在纯JavaScript/jQuery中创建了一个类似的项目,这不是该项目的问题。事实上,UI的速度非常快。我做错了什么?文档说明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-150毫秒才能完成处理(这意味着UI延迟超过1到2秒)。当我说阻塞时,我的意思是我选择日期预设的下拉列表在所有事情完成之前都不会关闭(我看到旋转的轮子)
我可以做些什么来让它运行得更快(并且没有UI阻塞)?我愿意接受任何想法。谢谢 在开发者模式下测量项目的速度可能是造成这种极端缓慢的原因之一
如果将应用程序部署到appserver,或者从devmode中的url末尾删除
&gwt.codesvr=127.0.0.1:9997
部分,则可以查看应用程序的实际速度。是否在生产模式下运行<代码>开发人员模式
?您使用的是哪个版本的GWT
?尝试更精确的探查器,如SpeedTracer
。可能有一千个原因。