我发现了一些有关live
和bind
的问题,但这些问题都与性能无关。我认为标题非常清楚,因此在jQuery中使用live
会对性能产生影响吗?我之所以这样问,是因为使用live
时每次触发事件时都必须进行查找,而我认为这可能会对性能产生负面影响。还是jQuery在做一些神奇的事情来加快这一步,例如监听在向DOM中添加某些东西时触发的某种事件?
最佳答案
通常,当站点上有很多需要事件处理程序的(...)元素时,使用.live()
/.delegate()
具有更好的整体性能。
将50x事件处理程序绑定(bind)到50个不同的节点比将一个事件处理程序绑定(bind)到这50个元素的公共(public)父节点要昂贵得多(这基本上就是.live()
所做的事情)。
现在有人可以说:“很好,但这伴随着开销事件冒泡”,这是绝对正确的。这就是引入.delegate()
的原因。 .live()
始终将处理程序绑定(bind)到document.body
,而.delegate()
显然是标记中任何子节点的父节点。但是,ojit_code带有一个参数,您可以在其中指定“最低公分母”,这意味着您要具有事件处理程序的那些元素共享的最接近的父节点。这实际上将开销减少到零。
我必须承认,我还从未进行过基准测试(当时),此时使用“实时绑定(bind)”才有意义。但是话又说回来,只要您将一个以上的处理程序绑定(bind)到一个元素,就有意义了。对我来说,只有一个函数而不是N的事实似乎很方便。