以下2种语法是否存在性能差异?
$(“span.foo”)
$(“.foo”)
有人告诉我,第一个只会搜索span
,其类别为foo
而第二个搜索所有元素。
答案 0 :(得分:3)
如果您正在寻找与性能相关的问题,最好对不同的解决方案进行基准测试,看看哪个更好。
它们可能在标记上有不同的结果基础。
但如果你只有span
的{{1}}课,那么第二个会更快。
原因可能是在第一种情况下,它将首先加载文档中的所有span,然后使用类foo
过滤它们,而第二种情况则是原生foo
来获取元素。< /子>
看看这个jsperf benchmark
答案 1 :(得分:1)
谁告诉过你这是正确的。
在超过100,000次迭代的两个元素上进行选择时,看起来大概是半秒钟(Firefox,Chrome小于此值)。
var start, end, i;
start = new Date();
for(i = 0; i < 100000; i++){
$("span.foo");
}
end = new Date();
$("span.foo").html(end - start);
start = new Date();
for(i = 0; i < 100000; i++){
$(".foo");
}
end = new Date();
$("div.foo").html(end - start);
我相信你可以成像,选择大量的元素肯定需要更长的时间。您可能也不会选择100,000次,但随着网站变得越来越大,javascript性能可能是最大因素之一,jQuery的上下文和选择器可以提高效率。
此外,如果您只想将函数应用于具有“foo”类的跨度,则可能正在选择不需要的元素