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

kal*_*jak 7 javascript

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

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

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

提前致谢!

fla*_*ian 5

这取决于很多方面.

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

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

 

如果要清空集合(数组),只需使用delete运算符即可.如果不定义集合为一个实例属性,而是使用的是var作为其定义为一个上下文变量,利用myArray.length = 0;这将delete数组中的整个存储.

 

如果您正在处理大型集合,则直接分配比使用该Array.prototype.push();方法更快.myArray[i] = 0;myArray.push(0);根据jsPerf.com 测试用例更快.

 

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

// 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;
};
Run Code Online (Sandbox Code Playgroud)

此处提供了上述测试用例.

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

+--------+------------+---------------+----------------------+
| 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              |
+--------+------------+---------------+----------------------+
Run Code Online (Sandbox Code Playgroud)

 

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

// 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 = [];
Run Code Online (Sandbox Code Playgroud)

此处提供了数组定义的测试用例.