JavaScript中是否有任何不可变映射的实现是';t比本机对象慢2个数量级?

JavaScript中是否有任何不可变映射的实现是';t比本机对象慢2个数量级?,javascript,Javascript,我对Immutable.js和本机对象进行了简单的插入和查找序列的微基准测试: Immutable.js var L=1000000; var m=Map(); 对于(变量i=0;i

我对Immutable.js和本机对象进行了简单的插入和查找序列的微基准测试:

Immutable.js
var L=1000000;
var m=Map();
对于(变量i=0;i
本机对象
var L=1000000;
var m={};
对于(变量i=0;i

看起来Immutable.js慢了100倍。我也尝试过使用Patricia树,但速度更慢。我想知道是否有任何方法可以实现更快的int键到任意值的不可变映射,或者这是最好的方法?

@PatrickRoberts迭代次数。已修复。钥匙是稀疏排列的,还是实际上从
0
1000000
之间没有孔?如果它们不是稀疏的,我建议使用本机
数组
。如果它们是稀疏的,那么这可能不是一个很有代表性的基准。@PatrickRoberts我认为这个基准还行,因为插入随机键不会改变我测试的性能。将其保持在0到1000000对于测试查找性能非常有用。但也许更好的测试方法是只插入随机键/VAL,而不是对查找进行基准测试,因为它无论如何都不是瓶颈。但是,是的,在实际应用程序中,键应该是稀疏的和随机的,否则我只使用数组。您不使用本机
Map
的原因是什么?具体来说,这是一个函数纯度的问题,还是您真的需要它来解决一个据您所知用不可变映射最好解决的问题?如果是后者,也许有另一种方法可以解决更广泛的问题?@PatrickRoberts迭代次数。已修复。钥匙是稀疏排列的,还是实际上从
0
1000000
之间没有孔?如果它们不是稀疏的,我建议使用本机
数组
。如果它们是稀疏的,那么这可能不是一个很有代表性的基准。@PatrickRoberts我认为这个基准还行,因为插入随机键不会改变我测试的性能。将其保持在0到1000000对于测试查找性能非常有用。但也许更好的测试方法是只插入随机键/VAL,而不是对查找进行基准测试,因为它无论如何都不是瓶颈。但是,是的,在实际应用程序中,键应该是稀疏的和随机的,否则我只使用数组。您不使用本机
Map
的原因是什么?具体来说,这是一个函数纯度的问题,还是您真的需要它来解决一个据您所知用不可变映射最好解决的问题?如果是后者,也许有另一种方法来解决更广泛的问题?
var L = 1000000;
var m = Map();
for (var i = 0; i < L; ++i) {
  m = m.set(i,i);
}
var s = 0;
for (var i = 0; i < L; ++i) {
  s += m.get(i);
}
console.log(s);
var L = 1000000;
var m = {};
for (var i = 0; i < L; ++i) {
  m[i] = i;
}
var s = 0;
for (var i = 0; i < L; ++i) {
  s += m[i];
}
console.log(s);