一个数组元素需要多少内存?

时间:2012-12-17 14:16:24

标签: javascript

我认为浏览器之间可能存在差异,

但是如何在Javascript中找出数组或其中一个元素需要多少内存?

我想知道在使用类型化数组时我节省了多少空间。

提前致谢!

1 个答案:

答案 0 :(得分:5)

这取决于很多方面。

  • 用于存储变量的引用的长度可以在大小上变化(如果您没有使用JS中实际不存在的关联数组,但这是一个不同的讨论。)
  • 项目本身的大小也各不相同。基本上,用于存储特定类型对象的二进制表示形式是存储器的内容。
    • 8位int使用1个字节。
    • 16位int使用2个字节。
    • 字符串中的字符使用2或4个字节(因为UTF-16)。
  • 如果您想更好地了解大小/速度/执行时间,我认为唯一准确的方法是使用浏览器附带的分析工具,或使用像FireBug这样的插件。

现实情况不同。您不应该担心客户端存储。至少不是这样的。您真正需要的唯一内存特定控件是memoization。除此之外,您需要做的就是清理您的痕迹,可以这么说。如果您处于OOP环境中,请确保始终delete实例引用,并在完成后COMDOM引用为空。

如果要清空集合(数组),只需使用delete运算符即可。如果您没有将集合定义为实例属性,而是使用var将其定义为上下文变量,请使用myArray.length = 0; deleteArray.prototype.push();数组中的整个存储。

如果您正在处理大型集合,则直接分配比使用myArray[i] = 0;方法更快。根据jsPerf.com test casesmyArray.push(0);// Option 1 for (var i = 0; i < someArray.length; i++) { // do something; }; // Option 2 var l = myArray.length; for(var i = 0; i < l; i++) { // do something }; // Option 3 for (var i = 0, ii = someArray.length; i < ii; i++) { // do something; }; 快。

迭代数组所花费的时间可能会发生巨大变化,具体取决于您引用数组长度的方式以及您使用的Internet浏览器。

+--------+------------+---------------+----------------------+
| Option | Firefox    | Google Chrome | Internet Explorer 11 |
+--------+------------+---------------+----------------------+
| 1      | Fastest    | 0.35% Slower  | 46% Slower           |
| 2      | 21% Slower | 0.15% Slower  | 0.09% Slower         |
| 3      | 21% Slower | Fastest       | Fastest              |
+--------+------------+---------------+----------------------+

上述测试用例可用here

截至2015年6月6日,相对速度如下:

// Doing this is pointless in JS. It will result in an array with 100 undefined values.
var a = new Array(100);

// Not even this is the best way.
var a = new Array();

// Using the array literal is the fastest and easiest way to do things.
var a = [];

在定义数组时,绝对没有必要指定长度,尤其是在进行延迟初始化时。

{{1}}

数组定义的测试用例可用here