【问题标题】:Do javascript engines perform any optimization of multidimentional arrays?javascript 引擎是否对多维数组进行任何优化?
【发布时间】:2016-11-07 12:20:20
【问题描述】:

我知道现代 javascript 引擎会在幕后创建隐藏类,因此 not recommended 在运行时更改对象(如果您有大量具有相同结构的对象)。

有人听说过二维数组的内部优化吗?

我这样创建一个二维数组:

var map = [];
for (i = 0; i < 100000; i++) {
    map.push(Array(2));
} 

我打算像这样打破良好的结构:

map[100].push(/* third element! */)

这会对性能产生巨大影响吗?

【问题讨论】:

  • 您应该尝试一下并进行基准测试
  • 查看this article,似乎需要该单个数组的内存副本,因为它将不再能够将该数组与其余数组一起存储在连续内存中。在对内存进行碎片整理之前,它不应破坏任何其他阵列。我怀疑你会看到任何性能影响。

标签: javascript performance v8 ecmascript-5


【解决方案1】:

V8 不会对多维数组进行任何优化,因此对性能应该没有可衡量的影响。

我不能代表其他 JavaScript 引擎,但如果你描述的模式在任何地方都有负面影响,我会感到惊讶。您正在谈论的那种优化通常需要做出假设并通过检查来保护它们。鉴于 JavaScript 数组的高度动态特性,这对于一维数组来说已经足够脆弱了;检查二维数组的任何重要属性可能不值得。

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2016-01-24
    • 2011-10-23
    相关资源
    最近更新 更多