JavaScript中多维数组或对象数组之间的性能

JavaScript中多维数组或对象数组之间的性能,javascript,multidimensional-array,Javascript,Multidimensional Array,我必须从API中加载大量数据,并且可以选择获取数据的格式。我的问题是关于性能,选择最快的格式加载到查询,并能够在JavaScript中快速读取它 我可以有一个二维数组: [0][0] = true; [0][1] = false; [1][2] = true; [...] etc etc.. 或者我可以有一个对象数组: [ { x: 0, y: 0, data: true}, { x: 0, y: 1, data: false}, { x: 1, y: 2, data: true}, [...

我必须从API中加载大量数据,并且可以选择获取数据的格式。我的问题是关于性能,选择最快的格式加载到查询,并能够在JavaScript中快速读取它

我可以有一个二维数组:

[0][0] = true;
[0][1] = false;
[1][2] = true;
[...]
etc etc..
或者我可以有一个对象数组:

[
{ x: 0, y: 0, data: true},
{ x: 0, y: 1, data: false},
{ x: 1, y: 2, data: true},
[...]
etc etc..
] 
对于GET请求,由于数据量巨大,我找不到任何基准来进行比较。。如果有什么地方,我很想看

问题的第二部分是阅读数据。我将有一个循环,需要获得每个坐标的值

我假设在二维数组中直接查找坐标比在每个循环中查找每个对象都要快。也许我错了

两种格式中哪一种加载和读取速度最快


谢谢。

关于GET请求的问题的第一部分,我想数组的加载速度会稍微快一点,但根据您的数据,它很可能可以忽略不计。我是基于这样一个事实,如果去掉空格,数组中每个成员的示例数据是12字节,而类似对象的示例数据是20字节。如果你的实际数据是这样的话,理论上只有3/5的数据需要传输,但是除非你得到很多数据,否则可能不会有明显的区别

回答问题的第二部分:任何代码的性能都将在很大程度上取决于特定用例的细节。对于大多数情况,我认为最重要的一点是:

  • 对象的可读性和用户友好性显著提高
当性能/速度是一个问题和/或高优先级时,听起来可能是你的情况,当然还有一些事情要考虑。虽然它涉及到写数据而不是读数据,但我发现这带来了一些有趣的观点。在Windows 7 64位上使用Chrome 45.0.2454.101 32位多次运行上述测试时,我发现以下几点通常是正确的:

  • 阵列即使不是最快的,也总是接近最快的
  • 如果对象的长度已知/可以硬编码,则可以使其性能接近阵列,有时甚至优于阵列
在上面链接的测试中,使用对象的代码在我的一个测试中以225 ops/sec的速度运行:

var sum = 0;
for (var x in obj) {
  sum += obj[x].payload;
}
与此代码相比,在同一测试中,使用以每秒13620次的速度运行的阵列:

var sum = 0;
for (var x = 0; x < arr.length; ++x) {
  sum += arr[x].payload
}
var总和=0;
对于(变量x=0;x
然而,需要注意的是,在同一测试中,使用硬编码长度对象的代码以14698 ops/sec的速度运行,超过了上述各项:

var sum = 0;
for (var x = 0; x < 10000; ++x) {
  sum += obj[x].payload
}
var总和=0;
对于(变量x=0;x<10000;++x){
总和+=obj[x]。有效负载
}

所有这些都说,它可能取决于你的特定用例,它将拥有最好的性能,但希望这能给你一些需要考虑的东西。

对象当然更可读。