性能问题:通用选择器与单独绑定
performance issue : generic selector vs individual binding
因此,在我的页面中,我将插入一系列元素,比如类名为"element",但其中一些元素将被禁用,这将导致额外的类"disabled"。现在我想将一个点击事件绑定到所有未禁用的元素,我只是想知道在性能方面是否只写更好
$(".element:not(.disabled)") .live("click",function() { ...
还是应该在插入每个元素时将单击事件绑定到它们?
p.s.我知道.on已经取代了.live,但现在我使用的是1.6.2版本,所以无法更改
一般经验法则:在发现性能问题之前,不要进行优化。
如果页面上有一万个元素,您可能会注意到:not()
选择器有点慢,但如果页面中有一万个元件,则说明您的设计出现了严重错误。
我怀疑页面上有一些(>1和<100)元素,在这种情况下,选择器的性能会很好!
首先,您不应该再使用.live()
了,因为所有版本的jQuery都不赞成使用它。我建议这样做:
$(document).on('click', '.element:not(.disabled)', function() {...});
这应该不会有什么性能问题,因为只有在点击时才会与选择器进行比较,而当比较完成时,这是一个相当简单的比较,只检查目标的类名。
此外,由于点击是在用户时间内发生的用户操作,并且选择器比较一点也不复杂,因此任何延迟都不太可能被通知(我们在这里谈论的最多是毫秒)。
如果您没有注意到性能问题,就不需要进行任何修复!
就我个人而言,我会附上点击事件,然后对它们进行检查。像这样:
$(".element").on("click",function() {
var $this = $(this);
if ($this.hasClass("disabled")) return;
//Continue here
});
此外,您应该使用.on
而不是.live
,因为它现在已被弃用。文档。
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 性能问题:通用选择器与单独绑定
- jQuery事件性能:在父级上绑定单个事件或在每个子级上绑定单独的事件
- Knockout计算的可观察对象的单独绑定不刷新
- 将绑定应用于整个dom或需要它的每个单独元素