2

我正在尝试提出一种将静态数据存储在 JSON 中的有效方法,以便可以在客户端查询中使用它。

目前,该数据由大约 60 个 CSV 文件组成,每个文件包含大约 60 个 CSV 文件。每个条目 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 是基于以下内容:

  • 每个文件都是一个 JSON 对象(我们称这个对象为“武器”)
  • 文件中的每一行都是另一个 JSON 对象,存储在相应武器对象下的数组中
  • 行的每个条目都存储在行对象下的固定长度数组中
  • 所有的“武器”对象都存储在一个数组中。

这意味着我有一个由大约组成的数组。60 个对象,其中平均存储了 100 个对象。这 100 个对象中的每一个都有一个包含 20 个对象的数组,每个条目由实际值和一些额外的元数据组成。如您所见,我已经有 120K 个对象了……生成的缩小 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. 如果可能,使用 WebSockets 流式传输数据
  2. 将数据转换为 TypedArrays (blob) - 您最终将处理类似 10K 文件的内容。
  3. 如果需要,使用索引数据库进行查询
于 2013-11-14T09:44:00.717 回答