Javascript 移动应用程序的大型JSON数据:我应该使用数组还是对象?
给定JSON数据是一个50000到300000条目的字典 鉴于此,我在移动设备上构建了一个混合应用程序(HTML5/JS/CSS),具有潜在的慢速设备 我以am阵列的形式获取数据,但由于我的用户应该不断与数据交互,因此为了速度和性能 我是否应该使用、查询、编辑一个Javascript 移动应用程序的大型JSON数据:我应该使用数组还是对象?,javascript,json,cordova,Javascript,Json,Cordova,给定JSON数据是一个50000到300000条目的字典 鉴于此,我在移动设备上构建了一个混合应用程序(HTML5/JS/CSS),具有潜在的慢速设备 我以am阵列的形式获取数据,但由于我的用户应该不断与数据交互,因此为了速度和性能 我是否应该使用、查询、编辑一个数组这样的(注意:我知道目标词=“zoo”): 但是我没有索引,我只有值“zoo”来获取{“word”:“zoo”}对象 或者我应该使用、查询、编辑对象,例如: var dict = { "acadia":{ "word": "a
数组这样的(注意:我知道目标词=“zoo”):
但是我没有索引,我只有值“zoo”来获取{“word”:“zoo”}
对象
或者我应该使用、查询、编辑对象
,例如:
var dict = {
"acadia":{ "word": "acadia", "fr":... },
"acaria":{ "word": "acaria", "fr":... },
"...": { ... },
...
}
阵列
对象比数组慢
写对象的代码比写数组的代码长
当我加载大量这样的数据时,我将响应压缩如下:
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是法国单词,则不是舒尔。。。如果我错了,请纠正我。我编辑代码
顺便说一句。。我在ipad1上加载了一个20mb的json文件,没有任何问题。。。它包含20k图像的exif数据,并且写得很差。。您可以使用cache.manifest
或webSQL
永久存储它。。。考虑到我的json文件写得很糟糕。。如果使用数组,则具有300k条目的字典的大小应相同
但是对于这样的大数据&如果您不断地更新,您还应该能够使用一些服务器端语言和适当的数据库,在这里您只更新必要的数据
编辑
data.json
{
info:['en','fr','it'],
data:[
['enword1','frword1','itword1'],
['enword2','frword2','itword2'],
//.....
]
}
然后将所有内容存储在webSQL数据库中。。
然后用这个。。用于脱机
创建更小的jsonfile
{
info:['en','fr','it'],
data:[
['enword1,frword1,itword1'],
['enword2,frword2,itword2'],
//.....
]
}
然后使用拆分(',')
单词不应包含,
较小因此json文件非常小
{
info:['en','fr','it'],
data:'enword1,frword1,itword1|enword2,frword2,itword2'
}
单词不应包含,
和|
words=data.split('|'),l=words.length;
while(l--){
word=words[l].split(',');//en,fr,it
// insert into webSQL
}
但你需要测试brosser是否能轻松应对
你需要在文件大小和插入所有这些单词所需的时间之间找到一个平衡点。我不知道你问题的答案,但是老兄,你不能把这么大的字典下载到我的手机上。这是不实际的。你要填满我的记忆卡,即使在纽约,以正常速度也需要几个小时。你真的应该考虑另一个解决方案。我目前的方法是,我将提供50个最常见的000个项目来下载。应该只需要几分钟。剩下的是另一个问题。但至少,我需要用最好的方法来工作,所以从服务器发送100条记录就很容易下载了好吧,忘了API吧+安装应用程序时,它只需从文件中下载一次数据。我们正在开发服务器端服务。但手机首先也需要提供可靠的离线服务<代码>法语
代表法语,是的。然后是的。。第二个代码应该是最小的,也是索引最快的。使用cache.manifest存储js文件。。或者webSQL,如果没有足够的空间。顺便说一句。。例子。。
words=data.split('|'),l=words.length;
while(l--){
word=words[l].split(',');//en,fr,it
// insert into webSQL
}