0

私の数値が 0 から 100 の間であることが事前にわかっている場合、JavaScriptで数値のメモリサイズを減らす方法を知っている人はいますか?

私の問題の例と説明:

私の JavaScript アプリケーションは、非常に大きなオブジェクト (それぞれに何千もの子) を処理します。私のオブジェクトは「シム」のコレクションのように見えます:

[
  {
    gender : "male",
    age : 45
  },
  {
    gender : "female",
    age : 21
  },
  {
    gender : "female",
    age : 78
  },
]
  • "female" のような文字列のメモリ サイズは 12 バイト (female.length*2) です。
  • 「女性」を示す数値のメモリサイズは8バイトになります
  • 「女性」を示すブール値のメモリ サイズは 4 バイトになります。

すごい !ブール値を使用して、オブジェクトのメモリ サイズを減らすことができます。

しかし、「年齢」プロパティのメモリサイズを減らす方法を知っていますか?

152042456.985 ではなく、> 0 および < 100 のみであることはわかっていますが、それぞれに 8 バイトが必要です。

アイデア ?どうもありがとう !

4

2 に答える 2

1

⌊32 ÷ 7⌋ = 4 歳を 1 つの整数に簡単に格納できます。また、GZip 圧縮、算術エンコーディング、またはさまざまな手の込んだトリックを使用することもできます。

しかし、なぜわざわざ?これが実際にあなたにとって問題になる方法はありません。オブジェクト自体のメモリ オーバーヘッドは、おそらくより重要です。32 ビットは問題なく、「数千の子」は実際には重要な数ではありません。999,999 歳 (最高の「千」) は、約 3MB のメモリです。

(ちなみに、「女性」を表す数値は 8 バイトになると言っていますが、整数はすべての一般的な JavaScript エンジンによって内部的に 4 バイトとして格納されます。)

于 2013-06-02T22:53:08.213 に答える
0

「リンク」を格納するために必要なポインタは、文字列または年齢のあらゆる種類のオブジェクトを使用するすべての格納メカニズムに 4 ~ 8 バイトを追加します。数値は、型付き配列にもかかわらず、取得できるスペース効率が最も優れています。

于 2013-06-02T23:07:08.677 に答える