【问题标题】:How to select/query effectively 70,000 json data?如何有效地选择/查询 70,000 个 json 数据?
【发布时间】:2010-09-03 12:43:36
【问题描述】:

我现在正在开发包含印度尼西亚 70,000 多个村庄的 javascript 库(可通过http://bisbak.com/regina/ 访问),并且我构建了一个数据浏览器小部件。在 Safari 和 Firefox 中一切正常。但是在使用 Chrome 时,当我碰巧选择一个地区(自动加载村庄)时,总是需要很长时间。检索地区村庄的代码如下:

for (n in data) {
  var rs = [];
  if (n is ok) rs.push(data[n]);
  return rs;
}

数据是包含超过 70,000 个村庄钥匙的 json 对象。

【问题讨论】:

  • 请提供一个数据对象的小例子,您是否可以按字母或结果数量(分页)细化查询?
  • 村庄数据的存储方式如下: data:{ 1205060020:["Parbaju Toruan", 1], 1205060021:["Hapoltahan", 1], ... } 前 7 位数字是实际上是村庄父级的 id,它是一个地区,它被用作查询参数。

标签: javascript json large-data-volumes


【解决方案1】:

也许您应该仅在必要时加载数据。

在您的情况下,您只能在启动时加载 Provinsi。而当一个Provinsi项被选中时,你只加载属于它的所有Kab./Kota项;并且当一个 Kab./Kota 项目被选中时,您只会选择属于它的所有 Kecamatan 项目,依此类推。

为了提高性能,您可以加载两个级别而不是一个。因此,当一个 Provinsi 项目被选中时,您会加载所有 Kab./Kota 项目和属于它的 Kecamatan。另外,在客户端和服务器端缓存数据。

【讨论】:

  • 我想我已经这样做了。只有在选择了 Kecamatan(区)时才会建造/装载一组村庄。我不知道在 Chrome 上运行时,哪部分代码会减慢查询速度。在 Safari 和 Firefox 上,即使我为每个对象添加属性(如人口、邮政编码等),我也不会出现明显的延迟。
  • @Muslax:接收 /regina/regina-desa-bps.js 确实需要大部分时间(请参阅tools.pingdom.com/?url=http://bisbak.com/regina)。
  • 是的,它是 2MB 或更多。但即使我离线测试时,Chrome 也会卡住超过 8 秒。是否有任何 JS 数据大小限制?或者你认为还有什么可以做的吗?谢谢。
  • @Muslax:但是为什么只需要一小部分的时候要加载所有的 2 MB 呢?
  • 我希望在客户端准备好所有数据。它呈现为树状。我们有33个省、400多个县、6000多个区和70000多个村。通常(如在我的数据浏览器小部件中)用户可以一次选择一个对象(并获得奖励:该对象的子对象)。它就像文件系统查找器/资源管理器。但即使一个地区(3 级对象)有几个村庄,Chrome 也总是卡住。在 Safari 和 Firefox 中,即使我调用返回所有 (70000+) 个村庄的函数,我的代码也运行良好。
猜你喜欢
  • 2016-10-29
  • 2014-10-22
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
相关资源
最近更新 更多