我认为浏览器之间可能存在差异,
但是如何在Javascript中找出数组或其中一个元素需要多少内存?
我想知道在使用类型化数组时我节省了多少空间。
提前致谢!
答案 0 :(得分:5)
这取决于很多方面。
现实情况不同。您不应该担心客户端存储。至少不是这样的。您真正需要的唯一内存特定控件是memoization。除此之外,您需要做的就是清理您的痕迹,可以这么说。如果您处于OOP环境中,请确保始终delete
实例引用,并在完成后COM
和DOM
引用为空。
如果要清空集合(数组),只需使用delete
运算符即可。如果您没有将集合定义为实例属性,而是使用var
将其定义为上下文变量,请使用myArray.length = 0;
delete
将Array.prototype.push();
数组中的整个存储。
如果您正在处理大型集合,则直接分配比使用myArray[i] = 0;
方法更快。根据jsPerf.com test cases,myArray.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。