gpt4 book ai didi

javascript - 一个数组元素占用多少内存?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:31 25 4
gpt4 key购买 nike

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

但是我如何在 Javascript 中找出一个数组或它的一个元素占用多少内存?

我想弄清楚使用类型化数组时我节省了多少空间。

提前致谢!

最佳答案

这取决于很多方面。

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

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

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

如果您正在处理大型集合,直接赋值比使用 Array.prototype.push(); 方法更快。根据 jsPerf.com test casesmyArray[i] = 0;myArray.push(0); 更快.

根据您引用数组长度的方式以及您使用的 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;
};

上面的测试用例可用here .

截至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 = [];

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

关于javascript - 一个数组元素占用多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13915837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com