为了访问数组中的数据,我创建了一个类似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是否还没有很好的实现,或者这个方法对我的用例有什么不理想的东西?
答案 0 :(得分:4)
我在Firefox 20中尝试过你的测试,它的速度更快,IE 10更快,更稳定。
所以我的答案是不,V8还没有很好的实施
答案 1 :(得分:1)
根据这个bugreport,冻结对象当前将其置于“字典模式”,这很慢。
因此,它不是改善性能,而是“枚举”/小数组的明显减速。