最好是有一个检查多个项目的事件侦听器,还是每个项目都有自己的侦听器



我正在构建一个小型画布应用程序(学习练习(,该应用程序构建树状结构,其中一个要求是各个节点对鼠标悬停事件做出响应。我看到了两种关于事件实施的方法;

  1. 为画布的mousemove设置一个单独的事件侦听器,当它启动时,它可以(递归(遍历树中的所有节点,并确定鼠标是否在特定节点上
  2. 让每个节点注册一个mousemove侦听器,并简单地检查事件是否专门应用于它

两者都可以,但我不确定是否有需要考虑的最佳实践。拥有多个侦听器比在多个节点上执行广泛检查更重。

通常,出于性能原因,"事件委派"被认为更好。它在内存中附加了一个侦听器,它在事件发生的最高层监视您的事件。

这不仅提高了性能,而且如果动态添加新元素(如添加新节点(,则现有处理程序将应用于新元素。

这里有一些关于这方面的资源,其中一个特别考虑到Canvas(尽管它有点…密集(。

一般授权/气泡:https://ehsangazar.com/optimizing-javascript-event-listeners-for-performance-e28406ad406c

画布特定:http://dbp-consulting.com/tutorials/canvas/CanvasEventDelegation.html

答案一如既往地是"取决于"。

如果你有单独的听众,会有多大的相似性?如果它们都是独一无二的,那么单个听众将更加灵活。

或者,如果您有一个整体侦听器,您需要多少代码才能满足节点之间的差异?如果没有差异,那么这显然是最好的选择。

在中间的某个地方,你必须做出判断,尽管大多数人会倾向于单一收听者选项,因为应该使用更少的内存。

相关内容

最新更新