我不确定json结构的最佳性能是什么。
我的结构目前看起来像这样:
{
"walk": [
{"x": 15,"y": 22,"on": ["onactive"]},
{"x": 15,"y": 22,"on": ["onactive","agreeConditions"]}
]
}
这将基本上重复每个数组对象中的键。这将占用空间。
在javascript中你可以像这样循环:
for(var i = 0; i< walk.length; i++){
console.log(walk[i].x);
console.log(walk[i].y);
console.log(walk[i].on);
}
我打算将其重组为:
{
"walk": {
"x": [15,15],
"y": [22,22],
"on": [
["onactive"],
["onactive","agreeConditions"]
]
}
}
这只是一个包含所有键的对象,每个键包含一个数组。绝对占用更少的空间!
在javascript中你可以像这样循环:
for(var i = 0; i< walk.x.length; i++){
console.log(walk.x[i]);
console.log(walk.y[i]);
console.log(walk.on[i]);
}
差异基本上是一个包含键和包含数组的键的数组。
那么基于良好的json结构的性能是什么?
阵列(
键:值,键:值
)
或者
对象(
键:阵列(值,值)
)
答案 0 :(得分:1)
如果您想知道哪一个更快,您可以运行自己的基准测试。不过,两者之间几乎没有差别。
我倾向于选择第一个结构,因为它更容易理解,并且它允许您在需要时将对象作为参数传递。例如,我可以写一个函数:
function shiftWalkPoint(walkPoint, n) {
walkPoint.x += n;
walkPoint.y += n;
}
for (var i = 0; i < walk.length; i++){
shiftWalkPoint(walk[i], 5);
}
然而,使用您的第二种格式,您无法做到这一点。您必须将整个walk
对象以及索引传递给任何想要使用它的函数,这更加尴尬。如果您的数据和x.length != y.length
发生了不良后果,也可能会遇到问题。
答案 1 :(得分:1)
您可以从JSON格式看到,文本格式中唯一的大小差异是对象数组中的重复属性名称。您还可以看到,在对象数组中更容易看到哪些值属于一起。
查看访问结构的方式,没有性能差异。访问您使用的walk[i].x
对象数组,相当于walk[i][x]
。访问包含使用walk.x[i]
的数组的对象,这相当于walk[x][i]
。唯一的区别是访问顺序,这不会影响性能。
查看内存使用情况,差异非常小。像[15,15]
这样的数组在内存中表示为一个对象,其中项是具有数字键的属性,与{ "length": 2, "0": 15, "1": 15 }
基本相同。这使得对象和数组在内存使用方面几乎相同。
总结: