我遇到了以下基准:https://jsperf.com/array-includes-and-find-methods-vs-set-has
如果你要执行它,你会发现map.has
是迄今为止在浏览器中查找集合中项目的最有效方式。
我还使用benchmarks.js
在Node中重新创建了此测试,并获得了以下结果:
节点9.4.0:
set.has x 6,454,428 ops/sec ±1.25% (90 runs sampled)
map.has x 64,519,657 ops/sec ±0.95% (86 runs sampled)
arr.includes x 11,415,721 ops/sec ±1.41% (87 runs sampled)
arr.indexOf x 11,344,587 ops/sec ±1.39% (87 runs sampled)
arr.find x 1,579,635 ops/sec ±1.09% (92 runs sampled)
Fastest is map.has
节点6.2.0:
set.has x 16,677,473 ops/sec ±1.35% (86 runs sampled)
map.has x 15,089,503 ops/sec ±1.35% (85 runs sampled)
arr.includes x 1,345,019 ops/sec ±1.31% (89 runs sampled)
arr.indexOf x 15,943,213 ops/sec ±4.40% (80 runs sampled)
arr.find x 1,423,994 ops/sec ±2.05% (82 runs sampled)
Fastest is set.has,arr.indexOf
这些结果对我来说非常令人惊讶,有谁知道:
为什么map.has
比set.has
快10倍,比array.indexOf
快近6倍?
在节点6中,includes
似乎比indexOf
慢得多,arr.find(val => val === 1)
与arr.includes(1)
相同。为什么呢?
set.has
似乎比以前在节点6中慢,为什么会这样?