选择器:具体在右侧?

时间:2016-01-21 12:22:16

标签: jquery

Learn jQuery说:

  

具体在选择器的右侧,不太具体   在左边。

// Unoptimized:
$( "div.data .gonzalez" );

// Optimized:
$( ".data td.gonzalez" );

我理解左手边的部分,但右边尺寸的具体部分是什么?现代浏览器的真实情况如何?据我所知,Sizzle引擎并未在现代浏览器上使用。让我们修改我们未经优化的"这方面的例子,包括我们需要具体的事实"在右侧删除div

// Unoptimized modification:
$( ".data .gonzalez" );

我们的"优化"我们有(对于现代浏览器)的例子:

  1. queryselectorall
  2. 呼叫.data
  3. 从步骤1的结果集开始getElementsByTagName td
  4. 从第2步的结果集中调用queryselectorall .gonzales
  5. VS。我们未经优化的修改"例如:

    1. queryselectorall
    2. 呼叫.data
    3. 从结果步骤1
    4. 致电queryselectorall .gonzales

      基本上,我们正在跳过第2步。所以赢了

      $( ".data .gonzalez" );
      

      跑得比:

      $( ".data td.gonzalez" );
      

      制定原则"具体取决于选择器的右手尺寸"现代浏览器已经过时了?

1 个答案:

答案 0 :(得分:0)

使用此HTML:

<div class="data">
  <table>
    <tr>
      <td class="gonzalez">test1</td>
      <td>test2</td>
      <td class="gonzalez">test3</td>
    </tr>
  </table>
</div>

Firefox 43:

$("div.data .gonzalez");$(".data td.gonzalez");$(".data .gonzalez");等于(+/- 84866次/秒)。

Chrome 47:

$(".data .gonzalez");是最快的(+/- 166496次/秒)。

$("div.data .gonzalez");$(".data td.gonzalez");稍慢(+/- 163243次/秒)。

IE 11:

$(".data .gonzalez");是最快的(+/- 55015次/秒)。

$("div.data .gonzalez");$(".data td.gonzalez");稍慢(+/- 42490操作/秒)

Opera 34:

$(".data .gonzalez");$(".data td.gonzalez");是最快的(+/- 148887次/秒)。

$("div.data .gonzalez");稍慢(+/- 135785次/秒)

Safari 5:

$("div.data .gonzalez");$(".data td.gonzalez");$(".data .gonzalez");等于(+/- 63560操作/秒)。

我在这里创建了一个测试:http://jsperf.com/compare-selector