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

rha*_*dyn 5 javascript jquery

jsperf的链接

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

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

use*_*716 6

这个:

$p.find("input,select");
Run Code Online (Sandbox Code Playgroud)

......使用原生的querySelectorAll.

这个:

$p.find("input");
$p.find("select");
Run Code Online (Sandbox Code Playgroud)

......使用原生的getElementsByTagName.

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

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


更新了你的测试,以进行更多的比较.表明如果您真的关心性能,则应使用本机API.