Sup*_*rco 5 javascript multidimensional-array
我必须从我的API加载一大块数据,我可以选择获取数据的格式.我的问题是关于性能和选择加载查询的最快格式,以及能够在JavaScript中快速读取它.
我可以有一个二维数组:
[0][0] = true;
[0][1] = false;
[1][2] = true;
[...]
etc etc..
Run Code Online (Sandbox Code Playgroud)
或者我可以有一个对象数组:
[
{ x: 0, y: 0, data: true},
{ x: 0, y: 1, data: false},
{ x: 1, y: 2, data: true},
[...]
etc etc..
]
Run Code Online (Sandbox Code Playgroud)
我找不到任何GET请求比较的基准,有大量的数据..如果有什么地方,我很乐意阅读它!
问题的第二部分是阅读数据.我将有一个循环,需要获取每个坐标的值.
我假设直接查找二维数组中的坐标比在每个循环中查找每个对象要快.或许我错了?
这两种格式中哪一种加载和读取速度最快?
谢谢.
对于有关GET请求的问题的第一部分,我想数组会稍微快一点加载,但是根据您的数据,它很可能可以忽略不计。我基于这样一个事实,即如果删除空白,则数组每个成员的示例数据为12个字节,而类似对象的示例数据为20个字节。如果对于您的实际数据而言这是正确的,那么从理论上讲,只有3/5的数据可以传输,但是除非您获得大量数据,否则它可能不会产生明显的变化。
要回答问题的第二部分:任何代码的性能将在很大程度上取决于特定用例的细节。对于大多数情况,我认为最重要的一点是:
就是说,当性能/速度是一个问题和/或高优先级(听起来像您的情况)时,肯定有一些事情要考虑。虽然它与写入数据有关,而不是读取数据,但我发现数组与对象的性能之间有很好的比较,提出了一些有趣的观点。在Windows 7 64位上使用32位Chrome 45.0.2454.101多次运行以上测试时,我发现这些要点通常是正确的:
在上面链接的测试中,使用对象的这段代码在我的一项测试中以225 ops / sec的速度运行:
var sum = 0;
for (var x in obj) {
sum += obj[x].payload;
}
Run Code Online (Sandbox Code Playgroud)
与在同一测试中使用以13,620 ops / sec运行的数组的代码相比:
var sum = 0;
for (var x = 0; x < arr.length; ++x) {
sum += arr[x].payload
}
Run Code Online (Sandbox Code Playgroud)
但是,需要注意的重要一点是,在同一测试中,此代码使用具有硬编码长度的对象的速度为14,698 ops / sec,超过了上述每个条件:
var sum = 0;
for (var x = 0; x < 10000; ++x) {
sum += obj[x].payload
}
Run Code Online (Sandbox Code Playgroud)
综上所述,这可能取决于您的特定用例,什么才是最佳性能,但是希望这可以给您一些考虑。