javascript - 使用事件监听器添加多个元素的最快方法?监听点击窗口不好吗?

标签 javascript performance events dom element

在我上一个问题之后,我提出了这个问题,这可能会更好。

我需要在页面上添加很多项目,我看到有时 appendChild+fregment 比 innerHTML 更快。无论如何,现在我需要知道添加元素和添加事件监听器的最快方法。

我看到的一种方法是监听窗口对象,然后进行过滤。 优点:

  • 只加一次,以后不加
  • 如果在窗口对象上添加事件时忘记在删除之前删除事件监听器,则不会出现内存陷阱
  • 其他人?

缺点:

  • 也许慢一些?
  • 速度较慢,因为我们需要过滤项目,并且会随时监听所有内容...在这一点上可能太慢了,我不知道。

我知道的另一种方法是监听创建的元素。

但是对于 innerHTML,我认为只适用于窗口对象监听器。

还有其他意见吗? 谢谢

最佳答案

为“许多”元素处理“多个”事件处理程序的最佳做法是事件委托(delegate),这基本上就是您所描述的。

在最近的共享父节点上创建一个监听器(document.body 当然会为任何元素执行此操作,但可能在其下方有另一个父节点)。

性能不应该是那里的问题。创建 200 个事件处理程序函数而不是一个要糟糕得多。

关于javascript - 使用事件监听器添加多个元素的最快方法?监听点击窗口不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317497/

相关文章:

javascript - 查找特定时间内两个值之间的值

iOS - 未收到 UIEventTypeRemoteControl 事件

sql-server - 我可以将长时间运行的存储过程分布在多个 CPU 上吗?

python - numpy:累积多重计数

c# - 如何让一个 View 模型更新另一个 View 模型的属性?

c++ - 如何在 MFC 中设置菜单项旁边的复选标记?

javascript - 获取/恢复 Monaco 编辑器撤消重做堆栈

javascript - 单击内部 <a> 链接时禁用 div 上的 onclick 事件(无 js 框架)

javascript - Angular: bool @Input 与 Attribute @Directive - 使用哪个?

具有索引澄清的 MySQL 性能