JavaScript:map.has如何比set.as和array.indexOf快得多?

时间:2018-04-15 12:36:25

标签: javascript node.js google-chrome benchmarking v8

我遇到了以下基准: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

这些结果对我来说非常令人惊讶,有谁知道:

  1. 为什么map.hasset.has快10倍,比array.indexOf快近6倍?

  2. 在节点6中,includes似乎比indexOf慢得多,arr.find(val => val === 1)arr.includes(1)相同。为什么呢?

  3. 节点9中的
  4. set.has似乎比以前在节点6中慢,为什么会这样?

0 个答案:

没有答案