JS中diffrend变量类型的权重



>问题

我们有高负载应用程序并使用内存缓存,我们希望在任何地方优化它。

问题

每种变量类型的重量是多少? 我的意思是:

  • 布尔值作为值
  • Emty 字符串是值
  • 零 我想使用类似的东西
cache.set(key, '') // emty string as value
// or
cache.set(key, true) // we don't need any value, we just need check keys 

(V8开发人员在这里。

选择哪个选项并不重要。 反正nulltruefalse""都存在。存储对其中任何一个的引用总是需要相同数量的内存(即 4 个字节;或者在没有指针压缩的情况下在 Node 上存储 8 个字节)。

事实上,这个原则甚至更进一步。我假设你会有很多这样的缓存条目。因此,您甚至可以定义自己的对象(如果这以任何方式有用),只要您只有其中一个对象和许多对它的引用,对象的大小实际上并不重要。

例:

let big = new Array(1000);  // About 4000 bytes.
let small = {answer: 42};   // About 16 bytes. (Simplifying a bit.)
for (let i = 0; i < 1000; i++) cache1.set(i, big);
for (let i = 0; i < 1000; i++) cache2.set(i, small);
for (let i = 0; i < 1000; i++) cache3.set(i, "");
for (let i = 0; i < 1000; i++) cache4.set(i, null);
for (let i = 0; i < 1000; i++) cache5.set(i, true);

完成此操作后,cache1cache5的所有缓存都将具有完全相同的大小:它们每个存储 1000 个引用。这些引用指的是什么并不重要。(我不能说它会有多少字节,因为我不知道你用什么作为缓存实现。如果它是一个Map,那么每个条目的内存消耗平均约为 12-20 字节,波动是因为后备存储以相当大的不常见步骤增长。

相关内容

最新更新