移动应用程序的大型JSON数据:我应该使用数组还是对象?

时间:2014-02-21 15:06:41

标签: javascript json cordova

鉴于JSON数据是一个50 000到300 000条目词典。

鉴于我在移动设备上构建了一个混合应用程序(HTML5 / JS / CSS),设备潜力很慢。

我将数据作为数组获取,但由于我的用户应该经常与数据交互,为了速度和性能,

我应该使用,查询,编辑array这样的(注意:我知道目标词=“动物园”):

var dict = [
   { "word": "acadia", "fr": ... },
   { "word": "acaria", "fr": ... },
   { ... },
   ...
]

但我没有索引,我只有值“zoo”来获取{ "word":"zoo"}对象。

或者我应该使用,查询,编辑object这样的:

var dict = {
   "acadia":{ "word": "acadia", "fr":... },
   "acaria":{ "word": "acaria", "fr":... },
   "...":   { ...                        },
   ...
}

1 个答案:

答案 0 :(得分:1)

<强>阵列

对象比数组慢。

写入对象的代码比写入数组的代码要长。

当我加载大量数据时,我按如下方式压缩响应:

obj={
 info:{en:0,fr:1,es:2,it:3},
 data:[
  ['acadia','... ','...'],
  ['acaria','... ','...'],
 ]
}
//access

var wordNumber=0,lng=obj.info.en;
obj.data[wordNumber][lng];

但它也取决于你如何构建/索引所有内容。

所以也许

obj{
 'acadia':['fr...','es...','it...'],
 'acaria':['fr...','es...','it...'],
}
// access:
var word='acadia',lng=0;
var word=obj[word]?obj[word][lng]:'word does not eist';

更快,因为它可以直接访问...

但没有重复项,也没有不允许的字符。你需要检查一下。

如果fr是法语单词,那就不是真的......如果我错了,请纠正我。然后我编辑代码。

btw ..我在ipad1上加载了一个20mb的json文件,没有问题...它包含了20k图像的exif数据。它写得很糟糕......你可以使用cache.manifest或{{1}永久存储它...并考虑到我的json文件编写得非常糟糕...如果使用数组,300k条目的字典应该是相同的大小。

但对于如此大的数据和如果你不断更新,你也应该能够使用一些服务器端语言和一个适当的数据库,只更新必要的数据。

修改

data.json

webSQL

然后将所有内容存储在webSQL数据库中.. 并使用..离线。

创建一个更小的jsonfile

{
 info:['en','fr','it'],
 data:[
  ['enword1','frword1','itword1'],
  ['enword2','frword2','itword2'],
  //.....
 ]
}

然后使用{ info:['en','fr','it'], data:[ ['enword1,frword1,itword1'], ['enword2,frword2,itword2'], //..... ] } 字词不应包含split(',')


更小所以json文件非常小。

,

字词不应包含{ info:['en','fr','it'], data:'enword1,frword1,itword1|enword2,frword2,itword2' } &amp; ,

|

但你需要测试brosser是否可以轻松处理。

你需要在filesize和插入所有这些单词所需的时间之间找到平衡点。