【问题标题】:GWT manipulating DOM elements caveatsGWT 操作 DOM 元素的注意事项
【发布时间】:2012-09-20 22:27:10
【问题描述】:

以下是我最近提出的问题: Understanding Document.createElement()

这里是上下文:

  • 在我的 GWT GUI 中有一个文本区域,其中包含一个文本
  • 用户可以在此文本区域中选择一个单词(或一系列单词)并将其转换为highlighted text
  • highlighted texts需要能够听用户:点击、右键、拖拽操作
  • 文本区域中有 1000 个highlighted text 的场景并非不可能。

我在想

  1. 直接在 GWT 中操作 DOM 元素是一种不好的方法吗? (不使用小部件)
  2. Add listener to SpanElement 这样的事情是不是一种糟糕的方法?会导致内存泄漏吗?
  3. 实现此类目标的最佳方法是什么?我已经使用一个使用 span 元素的简单自定义小部件进行了一些测试,在 DevMode 中将 1000 个小部件添加到 RootPanel 大约需要 6 到 10 秒。当我直接使用 DOM 元素时,此操作持续时间不到 1 秒(经过优化甚至不到 200 毫秒)。

编辑

根据我在@Gilberto 建议后所做的一些实际测试,性能应该不是问题。 http://jmichelgarciagwt.appspot.com/DOMTesting.html

不过,我还是希望收到有关问题 1) 和 2) 的反馈

【问题讨论】:

  • 您不应该使用 DevMode 来衡量性能。在进行任何基准测试之前,将您的代码编译为最终的 javascript。

标签: gwt dom gwt2 gwt-2.4


【解决方案1】:

向数百个跨度元素/小部件添加侦听器/处理程序绝对是一种糟糕的方法。

如果您继续使用 GWT,您可以将单个事件处理程序附加到您的“文本区域”小部件,然后查找哪个元素是点击源: http://comments.gmane.org/gmane.org.google.gwt/61911

如果您使用 DOM 元素,您可以将单个事件侦听器附加到您的“文本区域”元素,并在它冒泡时找出事件源。例如: http://icant.co.uk/sandbox/eventdelegation/

【讨论】:

  • 这确实是一些有用的链接。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-04-29
  • 2018-12-27
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多