Backbone View事件或冒泡

时间:2016-08-10 15:52:47

标签: javascript performance backbone.js

我有一个父视图,其中包含400个子视图。如果我在每个视图中注册2个事件,那将是800个将被litsitening的事件。

我的问题是我应该在子视图中注册事件,还是应该使用气泡事件来捕获父级别的事件。

这是优化和有效的。

提前致谢

2 个答案:

答案 0 :(得分:1)

GEOADD geoset lon lat name:data1:data2:...:datan

如果上面是结构,我的父骨干视图将如下所示,显然我将在父视图中创建监听器。为什么我们需要在400个子视图中具有相同的侦听器功能?

<div id="parent">
     <div id="child1" class="child"/>
     <div id="child2" class="child"/>
     <div id="child3" class="child"/>
     ....
     ....
     <div id="child400"/>
</div>

答案 1 :(得分:1)

您正在寻找的是event delegation,是的,它可以很好地扩展,而将大量的侦听器附加到单个元素则不会。根据我的经验,当你设置处理程序时,你会遇到性能损失最严重的部分。

Another answer on SO也涉及性能影响,以及this test on jsPerf的链接(目前无法使用,因为jsPerf因大修而关闭)。

或许更有用的是我的这两个演示:使用Backbone生成1000个元素,一次with event delegation,另一次without

从演示中可以看出,影响很大。演示中设置了三个事件 - mousedownmouseupclick - 生成页面的时间在没有事件委派的演示中大致翻了一倍。

另一方面,如果你看一下源代码,当你使用委托时,你会发现有些事情会变得有点复杂。将处理程序绑定到单个项视图(this.model.get( "number" ))时,很容易访问模型数据。如果使用委托,则必须采用间接方式。因此,与往常一样,的权衡。只要你只看表演,就没有。

相关问题