0

JavaScript のオブジェクトには、キーと値のペアが含まれています。典型的なペア (DevTools Profiler を使用) のコストは、キー名への参照、8 バイト、およびオブジェクトのコスト (小さな int の場合は 4 バイト、数値、参照などの場合は 8 バイト) です。

特に何百万ものオブジェクトを含む配列では、キーのコストが加算されます。

同一オブジェクトの配列に型付き配列を使用する asm.js のような方法はありますか?

はい、これは面倒だと思いますが、特定のプロジェクトでは、これが必要になる場合があります。

私が考えているアプローチの種類は、キーが各キーの値の型付き配列へのオフセットとその型を記述するテンプレート JS オブジェクトを使用することです。これらのオブジェクトの配列の場合、これらのオブジェクト スパンが複数存在します。

したがって、2 つの質問:

1-私の仮定は正しいですか..そして、主要なコストを最適化するクロム/最新のブラウザーには最適化はありませんか? おそらくここで使用されている制約があります: http://www.2ality.com/2013/08/protecting-objects.html

2 - もしそうなら、型付き配列をオブジェクトとして扱うためのライブラリはありますか? または、記事や要点などはありますか?

4

1 に答える 1

1

何百万ものオブジェクトがあり、すべてが既知のキーの同じセットを持ち、メモリが問題になるほど多くのオブジェクトがある場合、おそらくデータを JavaScript オブジェクトとして保存したくないでしょう。

おそらく、これをデータベースの問題のように考えたいと思うでしょう。あなたがしたい:

  1. セミコンパクトなストレージ形式
  2. ストレージ形式で適切なレコードを見つける方法 (これは、データが何であり、どのようにアクセスする必要があるかによって異なります。
  3. コードで実際にそのオブジェクトを使用する場合にのみ、セミコンパクト ストレージ フォーマットを読み取り、それをライブ JavaScript オブジェクトに変換する方法。
  4. セミコンパクト ストレージ フォーマットに変更を書き戻す方法。

たとえば、7 つのキー (フィールドなど) があり、3 つが数字で 4 つが文字列で、数字の 1 つが検索キーである場合、次のようにすることができます。

  • 3 つの型付き配列を作成する (数値ごとに 1 つ)
  • 通常の配列を 1 つ作成します。これにより、一意の区切り文字で連結されたすべての文字列値が保持されます。
  • マスター キー ルックアップ オブジェクトを作成する

おそらく複数の ajax 呼び出しからデータを読み込むときは、次のことを行います。

  • 配列の 1 つの長さ (すべて同じ長さ) に注意してください。これが新しいレコード番号になります。
  • ルックアップ キーをマスター キー オブジェクトに追加し、キーの値をレコード番号に設定します。
  • 各数値を各型付き配列に追加します (それぞれが配列内のレコード番号のインデックスになります)
  • すべての文字列値を区切り記号でキー順に連結し、連結された文字列値を文字列配列に入れます。

これで、セミコンパクトなストレージ形式とキー検索手段ができました。値を検索する場合は、マスター キー検索オブジェクトを使用します。キーの値は、他の配列へのインデックスであるレコード番号になります。レコードを検索し、JavaScript オブジェクト形式のレコード (オブジェクトのキーと値のペアのすべてのデータ) を返す 2 つの関数と、オブジェクトを書き込む別の関数 (変更されている可能性があります = が、マスター キーは変更される可能性があります) を作成できます。 't change) を保存形式に戻します。

これにより、データについて、ルックアップに使用する変更されない 1 つのマスター キーがあり、すべての文字列値をバインドして後で分離するための区切り文字を見つけることができ、後でそれらを分離できるといういくつかの仮定が立てられます。これらすべてを保存し、キーが何であるかを知っていること、およびオブジェクトは通常すべて同じキーを持っていることを確認します。

これらの仮定のいずれかが正しくない場合、それに対処するために設計を調整する必要がありますが、オブジェクトの巨大な配列以外のものを使用してデータを格納し、特定のオブジェクトを構成するのは、そのレコードのデータを操作する必要があります。

于 2013-11-14T17:08:47.563 に答える