2012-09-20 107 views
1

關注此問題我最近問:Understanding Document.createElement()GWT操縱DOM元素告誡

這裏是上下文:

  • 有一個文本區在我的GWT GUI持有文本
  • 用戶可以在此文本區域中選擇一個單詞(或一系列單詞),並將其轉換爲highlighted text
  • highlighted texts需要能夠傾聽用戶:單擊,右鍵單擊,在文本區域拖動&下降操作
  • 方案,其中包含1000 highlighted text也不是不可能。

我想知道

  1. 它是一個不錯的辦法來操縱直接在GWT DOM元素? (不使用小工具)
  2. 難道不這樣做嗎Add listener to SpanElement?它會導致內存泄漏嗎?
  3. 實現這些目標的最佳方法是什麼?我使用一個簡單的自定義小部件進行了一些測試,該小部件使用了span元素,並且在RootPanel中添加1000個小部件在DevMode中大約需要6到10秒。當我使用DOM元素direclty時,此操作持續時間低於1秒(優化時甚至小於200毫秒)。

編輯

性能不應該是一個問題,據我@Gilberto意見後做了一些真正的考驗。 http://jmichelgarciagwt.appspot.com/DOMTesting.html

不過,我很想有問題1)和2)

+1

您不應該使用DevMode來衡量性能。在進行任何基準測試之前,將您的代碼編譯爲最終的JavaScript。 –

回答

3

添加監聽器/處理器到幾百span元素/小工具,絕對是一個不錯的辦法反饋。

如果你留在GWT,您可以附加一個單一的事件處理程序到你的「文本區」窗口小部件,然後找哪個元素一直是點擊來源: http://comments.gmane.org/gmane.org.google.gwt/61911

如果你使用DOM元素去,您可以將單個事件偵聽器附加到「文本區域」元素,並在發生事件源時找出事件源。例如: http://icant.co.uk/sandbox/eventdelegation/

+0

這實際上是一些有用的鏈接。謝謝! –