对于这些$ .each循环,什么更快/更有效/更好?

时间:2013-06-25 11:26:14

标签: javascript jquery performance

我有一个Javascript对象,如下所示:

var a = {
  b: [1,2,3,4,5,6,7,8,9],
  c: [10,11,12,13,14,15]
}

遍历两个数组(我想循环遍历每个值!)我使用$.each,但我可以这样做:

// Option A:
$.each(a, function(i, d){
  $.each(d, function(j, e){
    console.log(e);
  }
});

或者

// Option B:
$.each(a.b, function(k, f){
  console.log(f)
})

$.each(a.c, function(l, g){
  console.log(g)
})

两者都生成完全相同的输出,但这两个版本中哪一个更快/更高效/更好?

有什么不同吗?

或者是否有更快/更有效/更好的方式(没有$.each)?

4 个答案:

答案 0 :(得分:8)

最有效的方法是使用简单的原生for循环。完全避免使用jQuery。

答案 1 :(得分:1)

没有什么可以击败:

var i=0, arr=a.b, len=arr.length;   
for(; i<len; i++ ) { console.log(arr[i]) } ;
顺便说一下,如果你有疑问,请问jsperf 这里有一个测试显示5X / 10X增加:
     http://jsperf.com/for-vs-foreach/9

答案 2 :(得分:1)

使用某种each总是慢于for循环是不正确的。 SM和V8可以做很好的内联 只要你没有为它们破坏它们 - 每个利用这个事实的自定义实现都可以运行just as fast as a for loop

话虽如此,jQuery $.each没有利用这个事实而且速度很慢。避免在性能敏感的情况下使用。

至于你的问题,我希望第二个在JIT中稍快一些,因为它避免了反射并使用静态属性访问,这被每个现代引擎利用。 $ .each是如此之慢,以至于这里的差异并不明显。

http://jsperf.com/129031290419034

答案 3 :(得分:0)

如果您真正担心的是速度,那么请转到javascript自己的for循环。 对于你的答案,我认为选项b会更快