我发现了一些关于live
和bind
的问题,但没有一个是关于性能的。我认为标题很清楚,那么在jQuery中使用live
会有什么性能影响?为什么我问这是因为每当使用live
就会触发事件,因此必须执行查找,我的想法是这可能会以负面方式影响性能。或者jQuery做了一些可以加快速度的魔术,比如听某些事件被添加到DOM时触发了某种事件?在jQuery中使用live而不是绑定会对性能产生影响吗?
回答
总体而言,当您的站点上有许多需要事件处理程序的(...)元素时,使用.live()
/.delegate()
的整体性能会更好。
将50个事件处理程序绑定到50个不同的节点,而不仅仅是将一个事件处理程序绑定到这50个元素的共同父项(基本上是.live()
),会更加昂贵。
现在人们可能会争辩说,“很好,很好,但是这是伴随着开销事件冒泡”,这是绝对正确的。这就是为什么.delegate()
被引入。 .live()
始终将处理程序绑定到document.body
,该处理程序显然是标记中任何子节点的父级。 .delegate()
但是需要一个参数,您可以在其中指定“最低公分母”,这意味着您希望拥有事件处理程序的那些元素共享的最接近的父节点。这实际上将开销减少到零。
我不得不承认,我从来没有基准(但)在哪一点上使用“活动绑定”是有意义的。但是再一次,只要你有多个绑定处理程序的元素,就很有意义。只有只有一个功能而不是N的事实对我来说似乎很方便。
从内存角度来看,live
表现更好。 bind
必须将相同的事件附加到目标选择中的每个项目。
从实际性能角度来看,live
的检查开支很小,检查is
,但这应该可以忽略不计。
这是一个非常简单live
样的方法:
function live(event, selector, callback) {
$(document).bind(event, function() {
if ($(this).is(selector)) {
return callback();
}
});
}
方式.live作品是:事件被绑定到父节点之一。所以实际上,每次事件被触发时都没有查找,但是这种方法的代价是不太受支持,但是IE。我建议你坚持.bind。如果您必须将事件绑定到许多元素,请使用。删除方法。
@MeaeEYE - 你从哪里得到有关它的支持不足的信息? – ScottE 2011-01-24 13:24:27
jQuery的文档准确解释它是如何工作的:
事件代表团 的.live()方法能够影响尚未通过使用事件代表团添加到DOM元素:绑定到祖先元素的处理程序负责在其后代触发的事件。传递给.live()的处理程序永远不会绑定到一个元素;相反,.live()将特殊处理程序绑定到DOM树的根。在我们的示例中,点击新元素时,会发生以下步骤:
- 生成单击事件并将其传递给处理。
- 没有处理程序直接绑定到,所以事件冒泡了DOM树。
- 事件冒起来,直到它到达树的根,这是默认情况下.live()绑定其特殊处理程序的地方。
- 从jQuery 1.4开始,事件冒泡可以选择停止在DOM元素“context”。
- 执行由.live()绑定的特殊点击处理程序。
- 此处理程序测试事件对象的目标以查看它是否应该继续。该测试通过检查$(event.target).closest('。clickme')是否能够找到匹配元素来执行。
- 如果找到了匹配的元素,则会调用原始处理程序。
因为步骤5中的测试在事件发生之前不会执行,所以可以在任何时候添加元素并仍然响应事件。
所以,你说的第一件事。它检查事件发生的时间。
- 1. 在GridView中使用android:numColumns =“auto_fit”会对性能产生影响吗?
- 2. 不使用jquery函数会对性能产生什么影响?
- 3. 在生产中使用ActionCable时,性能是否会影响?
- 4. Oracle中使用LIKE'string'vs ='string'会对性能产生什么影响?
- 5. jQuery - 使用live而不是绑定?
- 6. dns预取会对性能产生负面影响吗?
- 7. Drools Salience是否会对性能产生影响?
- 8. 未使用的导入和对象是否会对性能产生影响
- 9. 长时间使用CSS类名会对性能产生影响吗?
- 10. 在Scala中使用类型模式会对性能产生什么影响
- 11. 使用jaxb XMLAdapter会影响性能吗?
- 12. NSClassFromString会影响性能吗?
- 13. 没有听众的事件会对性能产生相当大的影响吗?
- 14. 为什么重复使用DataContext会对性能产生负面影响?
- 15. 对类变量使用默认值而不是在c#中初始化它会有什么性能影响吗?
- 16. 使用FLAG_ACTIVITY_SINGLE_TOP会产生什么影响?
- 17. 对于为OAuth使用而创建的MySQL表,使用latin1而不是utf8会产生什么影响?
- 18. 如果我使用&&而不是AND,它会对我的脚本产生任何影响吗?
- 19. 向MySQL表添加大列(VARCAHR)是否会对性能产生重大影响?
- 20. 基于文件的CacheDependency是否会对性能产生负面影响?
- 21. Docker的调试和实验标志是否会对性能产生影响?
- 22. 在Java中使用泛型会影响性能吗?
- 23. 发送电子邮件列表,不会对服务器产生性能影响
- 24. 使用烧瓶应用程序时使用打印是否会对性能产生负面影响?
- 25. nHibernate ShowSql会对现场系统产生什么影响吗?
- 26. django adminplus会影响性能吗?
- 27. 很多IFRAME会影响性能吗?
- 28. Javascript SetTimeOut会影响页面性能吗?
- 29. 您使用AWSDBProxy吗?扩展时性能会受到影响吗?
- 30. 包含不使用的类对性能有影响吗?
伟大的答案,我会等待看看有没有人做过任何基准测试。但我认为你很有可能。 – 2011-01-24 14:02:03