2012-06-22 194 views
0

的数组什么是更有效的(在存储器消耗换算)的方式来存储长度万的阵列具有4个整数属性:阵列阵列或对象

选项1:对象数组

var array = []; 
array[0] = {p1:1, p2:1, p3:1, p4:1} 

选项2:整数四个阵列

var p1 = [], p2 = [], p3 = [], p4 = []; 
p1[0] = 1; 
p2[0] = 1; 
p3[0] = 1; 
p4[0] = 1; 
+3

这里有两个有效的答案:“自己尝试一下,找出答案”和“没关系”。编写一个基准脚本并找出哪一个消耗更多内存是非常容易的。你不应该在乎,因为差异是微不足道的,这个规模的内存消耗在开发网站时并不重要。无论哪一种选择都会导致逻辑上更合理,可维护的代码就是您应该使用的代码。 – meagar

+0

@meagar还有“它取决于JavaScript引擎实现” –

+0

除此之外,所有的答案都会忘记,取决于你如何创建它,JavaScript数组可能需要更多的大小来存储它的元素。请参阅有关非常类似问题的讨论http://stackoverflow.com/questions/5040753/why-arraylist-grows-at-a-rate-of-1-5-but-for-hashmap-its-2 –

回答

0

四个由10,000个元素组成的数组在内存方面可能会更好,因为您只存储四个复杂对象(数组),然后存储40,000个整数 - 另一种方式是存储10,000个数组和40,000个整数数组)。

0

选项2. 4个对象(数组也是对象)与10001个对象。

0

我的猜测是,单纯从比特和字节的角度来看,一个多维数组将有最小的足迹:

var p = []; 
p[0] = [1,1,1,1]; 
+0

它不是单个数组 - 两个维度是由数组内的数组“模拟”的。它是2个数组 - 一个外部和一个内部。有了10000个元素,它将成为10001个阵列。 –

+0

是的。四个10,000个物品阵列与10,000个四个物品阵列......前者可能会获胜 – jackwanders

0

我实际测试了谷歌浏览器的任务管理器这两个选项,这显示关于打开的选项卡(Shift+ESC)信息,并且,当这不可能是100%精确的,但它确实表明显著差异:

对于第一种选择,用10,000个元素创建的阵列,每个是与4个属性作为对象你指定的内存使用量猛增了大约10MB启动阵列后。

第二种方法是创建4个数组,每个数组包含10,000个元素,使内存使用跳转大约5MB

某些内存使用跳转可能与创建和内部浏览器内容的实际处理有关,但重点是 - 与预期的一样 - 创建对象会为您正在存储的数据增加更多开销。