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

Performance between multidimensional array or arrays of objects in JavaScript

本文关键字:数组 之间 性能 对象 JavaScript      更新时间:2023-09-26

我必须从我的API加载一个很好的数据块,我有格式的选择,我得到的数据。我的问题是关于性能和选择最快的格式加载查询,并能够在JavaScript中快速读取它。

我可以有一个二维数组

[0][0] = true;
[0][1] = false;
[1][2] = true;
[...]
etc etc..

也可以是object数组

[
{ 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;
}

与使用13,620 ops/sec运行的数组的代码相比:

var sum = 0;
for (var x = 0; x < arr.length; ++x) {
  sum += arr[x].payload
}
然而,需要注意的是,这段使用硬编码长度对象的代码在相同的测试中以14,698 ops/sec的速度运行,超过了上面的每一个:
var sum = 0;
for (var x = 0; x < 10000; ++x) {
  sum += obj[x].payload
}

说了这么多,这可能取决于你的具体用例,什么会有最好的性能,但希望这给你一些考虑的事情。