jQuery:在迭代中更好地做$('#elem')或var x = $('#elem')?

时间:2013-10-15 09:49:08

标签: jquery performance iteration

这是一个效率问题。我已经在某种程度上测试了我的Chrome,但我不知道其他浏览器。

有一些变量会影响结果,例如:

  • 要执行的迭代次数

  • 变量的维度:$('。elems')与$('#elem')不同。

  • DOM结构

我已完成的测试位于:search by idsearch by class

for (j=0;j<med;j++){

    start = new Date().getTime();
    pippo = $(target);
    for (var n = 0; n < maxCount; n++) {
        pippo.css({height:'45px'});
    }
    elapsed = new Date().getTime() - start;
    result1 += elapsed;


    start = new Date().getTime(); 
    for (var n = 0; n < maxCount; n++) {
        $(target).css({height:'45px'});
    }
    elapsed = new Date().getTime() - start;
    result2 += elapsed;
}

结果似乎表明存储变量比搜索每一个都要好。

您有什么看法?

对于我的浏览器,我在存储变量时加速了20-30%。

1 个答案:

答案 0 :(得分:1)

鉴于示例中的元素由id选择,它在页面中应该是唯一的。因此,您应该始终在循环之前缓存它。

var $pippo = $('#pippo');

for (j = 0; j < med; j++) {    
    start = new Date().getTime();
    for (var n = 0; n < maxCount; n++) {
        $pippo.css({ height: '45px' });
    }
    elapsed = new Date().getTime() - start;
    result1 += elapsed;
}

如果选择器是class,那么你需要在循环中定义选择器,或者更好的是在迭代单个选择器时仍然使用each()