我认为浏览器之间可能存在差异,
但是我如何找出一个数组或它的一个元素在 Javascript 中占用了多少内存?
我想弄清楚使用类型化数组时节省了多少空间。
提前致谢!
这取决于很多方面。
现实是不同的。您不必担心客户端存储。至少不是这样。您真正需要的唯一特定于内存的控制是memoization。除此之外,你需要做的就是清理你的痕迹,可以这么说。如果您在 OOP 环境中,请确保在完成后始终实例化引用并将您的和引用归delete
空。COM
DOM
如果您想清空集合(数组),只需使用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;
};
上述测试用例可在此处获得。
截至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 |
+--------+------------+---------------+----------------------+
定义数组时,绝对没有必要指定长度,尤其是在进行延迟初始化时。
// 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 = [];
数组定义的测试用例可在此处获得。