JavaScript中有理想的数组大小吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我已经看到很多不同语言的实用程序例程,对于所需的阵列容量,它将计算阵列的“理想大小”。这些例程通常在分配数组大于容量的情况下使用。它们通常通过计算数组长度来工作,使得分配的块大小(以字节为单位)加上内存分配开销是给定容量所需的最小精确功率2。根据内存管理方案,这可以显着减少内存碎片,因为内存块已分配并释放。

JavaScript允许用户构建具有预定义长度的数组。那么“理想尺寸”的概念是否适用?我可以想到反对它的四个论点(没有特别的顺序):

  • JS内存管理系统的工作方式不会从这种策略中受益
  • JS引擎已经在内部实施了这样的尺寸策略
  • JS引擎并没有真正将数组保持为连续的内存块,所以整个想法都没有实际意义(除了类型化数组)
  • 这个想法适用,但内存管理是如此依赖于引擎,所以没有任何单一的“理想大小”策略是可行的

另一方面,也许所有这些论点都是错误的,一点点实用程序实际上是有效的(如:在脚本性能方面做出可衡量的差异)。

因此:能否为JavaScript数组写一个有效的“ideal size”例程?

提问于
用户回答回答于

javascript中的数组是他们的核心对象。它们只是通过api行为像数组。使用参数初始化数组只是使用该值设置长度属性。

如果传递给Array构造函数的唯一参数是介于0和232-1(包含)之间的整数,则会返回一个长度设置为该数字的新JavaScript数组。- 阵列MDN

此外,没有数组“Type”。一个数组是一个对象类型。因此它是一个Array Object ecma 5.1

因此,使用之间的内存使用情况不会有差异

var one = new Array();
var two = new Array(1000);

除了长度属性。当使用chrome的内存时间线在循环中进行测试时,这也会检查出来。在我的机器上创建1000个这两者都会导致大约2.2MB的分配。

用户回答回答于

必须测量性能,因为移动部件太多。VM和引擎和浏览器。然后,虚拟内存(平台Windows / Linux,物理可用内存和海量存储设备HD / SSD)。显然,当前的负载(其他网页的存在或服务器端,其他应用程序)。

我看不到这样的努力。当另一个选项卡加载到浏览器中或页面加载到另一台计算机上时,任何理想的性能大小可能都不再理想。

我在这里看到的最好的改进是开发时间,减少写入速度并加快部署您的网站。

扫码关注云+社区