当涉及到这些$.each循环时,什么更快/更高效/更好

What is faster/more efficient/better when it comes to these $.each loops?

本文关键字:什么 更好 高效 循环 each      更新时间:2023-09-26

我有一个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)?

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

使用某种each总是比for循环慢,这是不正确的。SM和V8可以做很好的内联只要你不破坏他们的利益,每个利用这一事实的自定义实现都可以运行得同样快作为for循环。

话虽如此,jQuery$.each并没有利用这一事实,而且速度很慢。避免出现对性能敏感的情况。

至于你的问题,我预计第二个问题在JIT中会稍微快一点,因为它避免了反射,并使用了静态属性访问,而每个现代引擎都利用了这一点。$。每一个都很慢,所以差异在这里并不明显。

http://jsperf.com/129031290419034

没有什么能比得上:

var i=0, arr=a.b, len=arr.length;   
for(; i<len; i++ ) { console.log(arr[i]) } ;

顺便说一句,如果您有疑问,请询问jsperf
这里有一个测试显示增长了5倍/10倍:
http://jsperf.com/for-vs-foreach/9

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