JavaScript技术疑问:为何map.has远快于set.has与array.indexOf?
JavaScript 元素查找性能:Set.has vs Map.has vs Array.includes
我最近针对JavaScript中三种常见的元素查找方法做了性能基准测试,涵盖浏览器和Node.js两种环境,结果如下:
浏览器端测试结论
在浏览器环境下,Set.has()是查找集合元素的最高效方式。
Node.js环境测试结果(Node 9.4.0)
我用benchmarks.js复现了相同的测试场景,得到的具体性能数据如下(数值越高代表性能越好):
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)
结果总结
- Node环境中
Map.has()的性能碾压另外两种方法,比Set.has()快了一个数量级 Array.includes()的表现处于中间位置- 浏览器和Node环境的性能表现存在明显差异,实际开发中需要结合运行环境和业务需求选择:
- 若仅需存储唯一元素并做查找,优先考虑
Set(浏览器端)或Map(Node端) - 数组的
includes()更适合小规模数据场景,或者对性能要求不极致的情况
- 若仅需存储唯一元素并做查找,优先考虑
内容的提问来源于stack exchange,提问作者Eliran Pe'er
相关产品推荐
相关产品推荐

