2

クライアント側のクエリで使用できるように、JSON に静的データを格納する効率的な方法を考え出そうとしています。

現在、このデータは約 60 個の CSV ファイルで構成されており、それぞれのファイルには約 1 個のファイルが含まれています。それぞれ 2000 ~ 2200 エントリ。このデータをサーバー側で解析し、クライアントからのクエリを処理する Web サービスを用意しています。前述のように、これをクライアント側に移動して、Web アプリケーションがアプリケーション キャッシュを使用してオフラインで動作できるようにしたいと考えています。

データの小さなサンプルを以下に示します。

Battle Axe,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
150,19EK,21EK,23EK,25EK,33ES,33ES,36ES,36ES,34ES,36ES,40ES,40ES,34ES,34ES,39ES,42ES,38ES,41ES,44ES,46ES
149,19ES,21ES,23ES,25ES,33ES,33ES,36ES,36ES,34ES,36ES,40ES,40ES,34ES,34ES,39ES,42ES,38ES,41ES,44ES,46ES
148,19EK,21EK,23EK,25EK,33ES,33ES,36ES,36ES,34ES,36ES,39ES,40ES,34ES,34ES,39ES,42ES,37ES,40ES,44ES,45ES
147,19ES,21ES,23ES,25ES,33ES,32ES,35ES,35ES,33ES,35ES,39ES,39ES,33ES,33ES,38ES,41ES,37ES,40ES,43ES,45ES

JSON への変換における私の最初の試みは、以下に基づいていました。

  • 各ファイルは 1 つの JSON オブジェクトでした (このオブジェクトを「武器」と呼びましょう)
  • ファイルの各行は、対応する武器オブジェクトの下の配列に格納された別の JSON オブジェクトでした
  • 行の各エントリは、行オブジェクトの下の固定長配列に格納されました
  • 「武器」オブジェクトはすべて配列に格納されていました。

これは、約で構成される1つの配列があることを意味しました。60 個のオブジェクトがあり、その中に平均 100 個のオブジェクトが格納されていました。これらの 100 個のオブジェクトのそれぞれには、実際の値といくつかの追加のメタデータで構成されるエントリごとに 20 個のオブジェクトの配列がありました。ご覧のとおり、私はすでに 120,000 個のオブジェクトに達しています...結果として縮小された json 文字列は 3mb でした。以下の小さなサンプル:

var weapon = 
{
 Name: 'Broadsword',
 HitEntries: [ 
 {
    High: 150,
    Low: 150,
    Unmodified: false,
    Hits: [ { Hits: '12', Critical: 'CK', Fail: false},...,{ Hits: '1', Critical: '', Fail: false}]
 }, 
 ...
 {
    High: 50,
    Low: 47,
    Unmodified: false,
    Hits: [ { Hits: '3', Critical: '', Fail: false}] 
 }
 ]
}

実行されるクエリの例を以下に示します。これは、上記のサンプル データ csv に基づいています。

  • バトルアックスの武器が選択されています
  • ロール (行) には 147 の値が選択されます。
  • 鎧の種類 (列見出し) には 9 の値が選択されています。

上記の結果は39ESになるはずです(行と見出しの間の相互参照)

この時点で、この道に進む前にアドバイスをもらうのがおそらく良い考えだと判断しました。どんな入力でも大歓迎です =)

4

1 に答える 1

0

ここでいくつかの最適化を行うことができます。

  1. 可能であれば WebSocket を使用してデータをストリーミングする
  2. データを TypedArrays (ブロブ) に変換します。10K ファイルのようなものを扱うことになります。
  3. 必要に応じてインデックス DB を使用してクエリを実行する
于 2013-11-14T09:44:00.717 に答える