jQuery什么是更快:选择器或方法?

Mak*_*Vi. 9 performance jquery jquery-selectors

让我们说我有$('mySelector:first');$('mySelector').first();.哪种方式效率最高?我查看了源代码,但仍然无法弄明白.

看起来在第一种情况下,jQuery会遍历每个项目,直到获得第一个项目:

CHILD: function( elem, match ) {
        var type = match[1],
        node = elem;
        switch ( type ) {
            ...
         case "first":
          while ( (node = node.previousSibling) )  {
           if ( node.nodeType === 1 ) { 
            return false; 
           }
          }
          if ( type === "first" ) { 
           return true; 
          }
          node = elem;
                ...
        }
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,jQuery会对集合进行切片,但我不确定它的效率如何:

function first() {
  return this.eq( 0 );
};

function eq( i ) {
  return i === -1 ?
    this.slice( i ) :
    this.slice( i, +i + 1 );
};
Run Code Online (Sandbox Code Playgroud)

Phr*_*ogz 13

目前接受的答案并不一致跨多个浏览器测试,比较:first:eq(0).first().eq(0).

对于当前主流的桌面浏览器:
$('foo').first()几乎快四倍$('foo:first')

如果您想检查方法,这里是测试及其当前结果.

  • 好的,我会给你答案,除非shamittomar可以提供他的测试. (2认同)
  • 是的数据驱动的答案!+1. (2认同)