6

为了访问数组中的数据,我创建了一个enum-like 变量,以使字段具有人类可读的标识符。

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 是否还没有一个很好的实现,或者这种方法对于我的用例有什么不理想的地方吗?

4

2 回答 2

4

I tried your test in Firefox 20, which is massively faster across the board, and IE 10 which slightly faster and more consistant.

So my answer is No, V8 does not yet have a great implementation

于 2013-04-17T10:51:30.433 回答
1

根据这个错误报告,冻结一个对象当前会将其置于“字典模式”,这很慢。

因此,它不仅没有提高性能,反而成为“枚举”/小型数组的明显放缓。

于 2013-04-30T10:03:39.977 回答