2010-04-12 77 views
1

我有以下两个代码块。jQuery选择器性能

码块1

var checkboxes = $("div.c1 > input:checkbox.c2", "#main"); 
var totalCheckboxes = checkboxes.length; 
var checkedCheckboxes = checkboxes.filter(":checked").length; 

码块2

var totalCheckBoxes = $("div.c1 > input:checkbox.c2", "#main").length; 
var checkedCheckBoxes = $("div.c1 > input:checkbox.c2:checked", "#main").length; 

哪以上会更快一个?

谢谢,

的Rahul作为过滤器被应用到包含所述选择的元素已经对象

回答

2

数1将稍快是。 2号基本上执行相同的选择器查询两次,第二次包括:checked选择器epxression。

在现实中,这两者之间的速度差是不会成为一个搅局者:)

我倾向于使用

var checkboxes = $("#main").find("div.c1 > input:checkbox.c2"); 
var totalCheckboxes = checkboxes.length; 
var checkedCheckboxes = checkboxes.filter(":checked").length; 

直供方面将基本解决上述,但使用.find()已被证明是更快(我会挖掘参考,我相信它是在约翰Resig的博客)。

+0

但是,与Chrome或FF相比,此操作在IE中稍慢。 – rahul 2010-04-12 06:59:08

+1

那么我的问题是,目标受众的主要浏览器是什么?使用能够在大多数情况下提供最佳性能的方法?你如何衡量每个浏览器的性能以及IE的哪个版本? – 2010-04-12 07:03:26

+0

该网站必须在IE6 +,FF和Chrome上运行。我已经在IE6,7和8中测试过了。 – rahul 2010-04-12 07:09:07

1

也许写一个小测试,并使用不同的浏览器进行基准测试。

0

如果你想要表现,不要那么具体,如果你能避免它。例如,如果你只负担得起查找类'c2',它应该提高选择速度。

$("#main").find(".c2") 

应该是最快的解决方案。