多个选择器是否比jquery中的单个选择器更优选?

时间:2017-12-18 11:41:10

标签: jquery performance

这可能是一个基本问题,但令人困惑的是:多个选择器是否比jquery中的单个选择器更优选?我有以下代码。

$('#sample_1').css('border', '1px solid #00ffff');
$('#sample_2').css('border', '1px solid #00ffff');
$('.sample_3').css('border', '1px solid #00ffff');

将这些连接起来的优势确实如下。在一篇文章中,它给出了处理逗号然后合并结果可能需要时间,因此这种连接形式需要更多时间。是这样吗?这会真正提升性能吗?或者这对代码简单性更有利吗?

$('#sample_1, #sample_2, .sample_3').css('border', '1px solid #00ffff');

3 个答案:

答案 0 :(得分:1)

第一个代码段与第二个代码段的区别在于对单个函数调用的3个函数调用。

显然,JQuery可以通过第二种方式调用

答案 1 :(得分:1)

第二个优点是您只需访问并遍历整个DOM树一次,这将提高性能。 当您想提高浏览器应用程序的性能时,减少DOM访问是主要因素之一。

例如,当您使用JQuery创建具有很多像这样的单元格的表时:

var table = $('<table>');
for(var i = 0; i < 1000; i++){
   var row = $('<tr>');

   for(var j = 0; j < 10; j++){
      var col = $('<td>MyCell</td>');
      row.append(col);
   }

   table.append(row);
}

您可以通过删除大量的JQuery $('...')调用,串联一个大字符串并将该字符串作为html添加到表中来创建高性能的提升

var table = $('<table>');
var htmlString = "";
for(var i = 0; i < 1000; i++){
   htmlString += '<tr>';

   for(var j = 0; j < 10; j++){
      htmlString += '<td>MyCell</td>';
   }
   htmlString += '</tr>';
}
table.html(htmlString);

在上面的示例中,创建了1万个单元,性能可以提高99%。 当您只减少2个对$('...')的调用时,除非您的代码处于循环内,否则性能提升不会很明显。

答案 2 :(得分:0)

我认为在这个特殊的用例中,您认为逗号可能比单独的查询花费更多的时间是无效的,因为在这两种情况下,它都可以很好地执行,但是更优化的方式是第二种因为DOM只会更改一次,而对于3个单独的查询,DOM会更新三次,这将非常昂贵。