JavaScript中多维数组或对象数组之间的性能
Performance between multidimensional array or arrays of objects in JavaScript
我必须从我的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
}
说了这么多,这可能取决于你的具体用例,什么会有最好的性能,但希望这给你一些考虑的事情。
- 尝试在一个对象的值和一个对象数组之间进行匹配
- 只有一些带undercore.js的字段在对象数组之间求交集和等于
- 我如何获得 Javascript 中关联数组和常规数组之间的区别
- 在 vue.js 中的数组之间移动项目
- 查找多个 JavaScript 数组之间的匹配项
- JSON和Javascript数组之间的“交互”(和语法)
- 查找开始时间和结束时间数组之间的间隔的最佳方法是什么
- 确定猫鼬中空数组和未定义数组之间的区别
- Angularjs中对象数组之间的差异
- 这些数组之间有什么区别
- 数组之间操作中的语义含义
- 如何在JavaScript中的数组之间放置逗号
- Javascript-在不使用Array.prototype.filter的情况下,根据键值获取两个对象数组之间的差异
- 在数组之间交换元素
- 在JavaScript中查找两个JSON数组之间匹配的JSON项,并将CSS应用于UL列表中的匹配项
- 找出n个对象数组之间的差异(使用额外的对象)
- 在升序和降序多维数组之间切换
- JavaScript中多维数组或对象数组之间的性能
- 这些数组之间的差异以及如何比较它们
- 通过下拉菜单在数组之间切换需要花费相当多的时间.我如何减少它??Angularjs IvhTreeview