我在尝试对Arrays vs Sets性能进行基准测试时迭代大型数组和集合。
我最终发现,如果集合的长度恰好是63385或更高,则集合似乎更快。
阵列似乎在任何长度以下都会更快。
以下是我看到的内容:
长度63385及以上
map#Array->big x 119 ops/sec ±1.62% (76 runs sampled)
map#Set->big x 349 ops/sec ±4.11% (81 runs sampled)
长度63384及以下
map#Array->medium x 2,407 ops/sec ±0.48% (94 runs sampled)
map#Set->medium x 818 ops/sec ±0.83% (90 runs sampled)
这是我的基准代码(我知道它可能是我看到的古怪的来源)。
const Benchmark = require('benchmark');
const suite = new Benchmark.Suite;
const array = [];
let mappedArray = [];
const set = new Set();
const mappedSet = new Set();
const mediumArray = [];
let mediumMappedArray = [];
const mediumSet = new Set();
const mediumMappedSet = new Set();
const max = 63385;
for (let i = 0; i < max; i++) {
array.push(i);
set.add(i);
if (i < 63385) {
smallArray.push(i);
smallSet.add(i);
}
}
suite.add('map#Array->big', () => {
mappedArray = array.map((val, index) => val * 2);
});
suite.add('map#Set->big', () => {
set.forEach((val) => mappedSet.add(val * 2));
});
suite.add('map#Array->medium', () => {
mediumMappedArray = mediumArray.map((val, index) => val * 2);
});
suite.add('map#Set->medium', () => {
mediumSet.forEach((val) => mediumMappedSet.add(val * 2));
});
suite.run();
突然改变的原因是什么?