jquery live()函数的性能损失
Performance penalty for jQuery's live() function
对于某些元素,每当悬停在它们上面时,我希望元素变得更大,然后在取消悬停时缩小。所以我用$('.elementClass').hover(function() { enlarge(this); }, function() { shrink(this); });
。我把它放在所有网页的$(function() { });
区域,因为许多网页都有这类元素。
有时我需要创建新的动态元素,它们上面有这些元素。当然,我必须为它们再次调用上面的hover函数,因为它们一开始并不存在。
似乎最方便的是在每个网页中简单地拥有一整套$('.variousClasses').live('variousEvents', function() { });
调用,以实现上述所有可能的功能。
所以问题是,如果有一个性能损失调用live()
这么多次,即使是在元素,永远不会触发那些事件或元素,永远不会存在?重要的是,我要小心只调用hover()
或live('hover')
(和其他事件)仅在需要时 ?
对你的问题的一般回答是,你应该尽量减少不必要的函数调用——在动态内容的情况下可能更应该如此。
特别是,live()
是一个很好的例子,因为它确实带有一些(潜在的)显著的性能复杂性。当您调用live()
时,jQuery将您选择的事件绑定到document
对象。这意味着每次触发事件时,它都会从origin元素上升到document
对象。根据您的网站结构(一般来说),这可能是昂贵的。
delegate()
是一个更好的选择最好使用jQuery的delegate()
函数,特别是如果您有一个预定义的父容器元素,所有事件都将在其中触发。当您使用delegate()
时,您基本上是在使用live()
的受限版本,这样事件只能传播到指定的父元素。因此,您可以避免在您不关心的元素上触发许多可能代价高昂的事件。
在您的情况下,由于您正在处理动态生成的内容,因此您要么必须使用上述函数,要么设置代码,以便在将元素插入DOM时将事件处理程序绑定到它。前者可能更容易,但后者可能提供略好(可能无法识别)的性能。
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 使用正则表达式评估电子邮件地址时出现性能问题
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 在javascript中搜索项目列表的性能
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- JavaScript数组优化以提高性能
- React+Redux性能优化与组件ShouldUpdate
- 在循环中附加事件处理程序时出现浏览器性能问题
- JavaScript-===vs===运算符性能
- 超时功能的性能
- Pg承诺性能提升:在冲突中
- immutable.js与嵌套映射/对象的比较/相等性能
- NodeJ中的注释会影响性能吗
- 如果条件为循环-性能差异
- 同时淡出许多(大约20个)道具,导致巨大的性能损失.解决方案
- 如何不断移动SVG路径而不损失性能
- jquery live()函数的性能损失
- 动态注入画布上意外的性能损失