You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否为已知元素数量的JS Map/Set预分配内存?

Map & Set Memory Pre-Allocation in JavaScript

Great question—memory pre-allocation is a smart optimization for large collections, so let's break down what works (and what doesn't) for Maps and Sets in JavaScript.

Core Answer

Unlike arrays (where you can use new Array(itemCount) to pre-allocate memory), Maps and Sets don't have native support for passing a length parameter to their constructors to reserve memory upfront. However, there's a widely discussed workaround, and its performance varies a lot across major browsers.

Context: Array Pre-Allocation Performance

First, as you noted, pre-allocating arrays gives solid performance gains in most engines:

  • Chrome: Pre-sized arrays fill ~3x faster than dynamically growing ones
  • Firefox: Minimal difference, but pre-sized arrays still have a slight performance edge
  • Edge: Pre-sized arrays fill ~1.5x faster

Map Pre-Allocation Workaround & Test Results

Since Map's constructor doesn't accept a length argument, the common suggestion is to pass a pre-built entries array (e.g., new Map(preBuiltEntries)). This lets the Map infer the expected size upfront, which could theoretically trigger pre-allocation. Here's how this performs when initializing a Map with 10,000 elements:

  • Chrome: Using an entries array is ~1.5x slower than adding elements incrementally
  • Firefox: No measurable performance difference between the two approaches
  • Edge: Using an entries array is ~1.5x faster than incremental additions

For Sets, the same logic applies: passing a pre-built values array to new Set(preBuiltValues) would let the engine potentially pre-allocate, and the performance profile would mirror the Map results closely (since most browsers use similar underlying implementations for both collections).

Key Takeaways

  • If you're targeting Edge, using a pre-built entries/values array to initialize your Map/Set is a clear performance win.
  • For Chrome, skip this workaround—adding elements incrementally will be faster.
  • Firefox users won't see a meaningful difference either way, so choose whichever approach is cleaner for your code.

内容的提问来源于stack exchange,提问作者Valeriy Katkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:07:49