为什么冻结的“枚举”会变慢?

时间:2013-04-17 10:37:45

标签: javascript node.js

为了访问数组中的数据,我创建了一个类似enum的变量,以便为字段提供人类可读的标识符。

var columns = { first: 0, second: 1 };
var array = ['first', 'second'];
var data = array[columns.first];

当我发现Object.freeze时,我想将它用于枚举,以便无法更改,我希望VM能够利用此信息。

事实证明,Chrome和Node上的测试速度较慢,但​​Firefox上的测试速度稍慢(与数字直接访问相比)。

代码可在此处找到:http://jsperf.com/array-access-via-enum

以下是Node的基准测试(对应于JSPerf测试):

  fixed Number: 12ms
  enum: 12ms
  frozenEnum: 85ms

V8是否还没有很好的实现,或者这个方法对我的用例有什么不理想的东西?

2 个答案:

答案 0 :(得分:4)

我在Firefox 20中尝试过你的测试,它的速度更快,IE 10更快,更稳定。

所以我的答案是不,V8还没有很好的实施

答案 1 :(得分:1)

根据这个bugreport,冻结对象当前将其置于“字典模式”,这很慢。

因此,它不是改善性能,而是“枚举”/小数组的明显减速。