find('a,b')比find('a')+ find('b')慢,为什么?

时间:2011-10-10 12:36:44

标签: javascript jquery

jsperf's link

我不是jQuery专家(甚至不是一个好用户),我还没有研究过它的整个源代码(只有一小部分无法帮我解决这个问题)。

有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:6)

此:

$p.find("input,select");

...使用原生querySelectorAll

此:

$p.find("input");
$p.find("select");

...使用原生getElementsByTagName

getElementsByTagName只是更快,也许是因为它是一个非常简单的选择,并且已经存在更长时间,给它更多时间进行优化。

此外,当jQuery使用querySelectorAll时,即使您从指定的上下文搜索,它也会从document执行此操作,因此这会产生影响。要将结果缩小到您提供的上下文,它会更改您的选择器以使用元素的ID,或者如果不存在则为其提供临时值。


updated your test进行更多比较。表明如果您真的关心性能,则应使用本机API。

答案 1 :(得分:0)

上面说的是什么___Ӫ是真的,但请注意结果不一定等同,因为第一个将(AFAIK)以散布文档顺序返回inputselect并且第二个会一个接一个地返回它们。这可能与您的申请无关,但需要注意。