2012-08-14 136 views
0

我是GWT的新手。我創建了一個基於MVP的項目(如here所述),它使用了許多自定義事件。有幾個小部件(10+)監聽一些全局事件並在事件處理程序中執行一些操作(包括寫入DOM)。GWT事件處理程序阻止UI

我在找的是UI阻塞並且不會更新,直到一個事件的每個處理程序完成處理。這會導致用戶界面在頁面加載時以及導致小部件更新的任何其他事件中執行得很慢。

我在普通的JavaScript/jQuery中創建了一個類似的項目,這不是該項目的問題。事實上,用戶界面非常快速。我在這裏做錯了什麼?該文檔指出,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-150ms完成處理(這意味着有超過一到兩秒的UI延遲)的一些基本分析確定。當我說阻擋時,我的意思是選擇日期預設的下拉菜單甚至沒有關閉(並且我看到了棘爪輪),直到所有內容完成。

我該怎麼做才能讓這個運行更快(並且不會阻塞UI)?我願意接受任何想法。謝謝!

+0

你在'生產模式'中運行嗎? '開發者模式'?你使用的是哪個版本的GWT?嘗試更精確的分析器,例如'SpeedTracer'。可能有一千個原因。 – 2012-08-15 09:33:50

回答

0

在開發人員模式下測量項目的速度可能是造成這種極端緩慢的原因。

如果將應用程序部署到應用程序服務器,或者如果從devmode中的url末尾刪除&gwt.codesvr=127.0.0.1:9997部分,則可以檢查應用程序的實際速度。

相關問題