哪种jQuery选择方法更快?

Cra*_*g M 5 performance jquery

我想知道在使用jQuery进行选择时使用context参数与使用普通的CSS范围选择器相比是否有任何优势.

假设我有这个HTML:

<div class="contacts">
    <h1>All contacts</h1>
    <div class="contact new">
        <p class="name">Jim Jones</p>
        <p class="phone">(555) 555-1212</p>
    </div>
    <div class="contact new">
        <p class="name">Bob Smith</p>
        <p class="phone">(555) 555-1213</p>
    </div>
    <div class="contact new">
        <p class="name">Dave Baker</p>
        <p class="phone">(555) 555-1214</p>
    </div>
    <div class="contact">
        <p class="name">Pete Harrison</p>
        <p class="phone">(555) 555-1215</p>
    </div>
    <div class="contact">
        <p class="name">George Donald</p>
        <p class="phone">(555) 555-1216</p>
    </div>
    <div class="contact">
        <p class="name">Chris Root</p>
        <p class="phone">(555) 555-1217</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我想从联系人div中获取所有新联系人(标记为'new'类),哪种方法更快,更好地扩展等等.?

$('.contacts .new');
Run Code Online (Sandbox Code Playgroud)

要么

$('.new', '.contacts');
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

更新

在答案和评论中散布着很多很棒的信息.总结一下主要观点,在大多数浏览器中,当存在多个.contacts div时,单个选择器会更好地扩展.在大多数浏览器中,两个选择器上下文方法更快,只有一个.contacts div存在.

从中获取的有用之处是我们可以在选择具有id的元素内部时使用一种方法.

$('p:first', '#chapter2'); // get the first paragraph from chapter 2
Run Code Online (Sandbox Code Playgroud)

并将单选择器方法用于我们从可能较大的元素组中进行选择的实例.

$('.chapter p:first-child'); // get the first paragraph from all chapters
Run Code Online (Sandbox Code Playgroud)

Pab*_*dez 11

对所有(我的)赔率,似乎2号是最快的.

在这里

  • 我刚刚在Opera中运行它.查看结果.这是我运行的第三个测试,表明他们有一个*高度优化的`querySelectorAll`. (5认同)
  • 关于为什么会出现这种情况我的2美分:jQuery可以检测到每个选择器都是一个简单的类查找,因此它将两者都委托给高度优化的浏览器函数`getElementsByClassName`.当它们在一个字符串中时,它无法进行这样的优化,并且会使用`querySelectorAll`或它自己的方法来查找它. (3认同)