【问题标题】:How to render a map with a lot of marker quickly?如何快速渲染带有大量标记的地图?
【发布时间】:2013-12-30 07:29:28
【问题描述】:

所以,我有一个带有很多标记的谷歌地图,有时是 500 000。我使用 markerclusterer 使其可读。

但是将 500k 结果处理成一个 json 文件以便提供给谷歌地图需要很长时间。

知道如何加快这个过程吗?

【问题讨论】:

标签: ruby-on-rails ruby json google-maps activerecord


【解决方案1】:

有一些优化:

  1. 使用原始数据,而不是对象/模型。将数据库中的数据映射到对象需要很多时间。您可以通过使用ActiveRecord::Base.connection.execute(sql) 查询数据库来消除这种情况。
  2. Russian doll caching 非常适合大型数据集。您可以缓存单个记录和记录组。有关缓存过期的一些好的建议,请参阅 "How key-based cache expiration works"。将它与一些内存缓存(如 memcached)结合起来,结果会更快。
  3. 发送尽可能少的数据。对于 500k 条记录,每条记录每增加一个字节将导致半兆字节的额外流量。因此,与其返回完整的描述性 JSON,不如返回一个数组数组。示例:[[<lan1>, <lng1>, <id>], [<lat2>, ...], ...]
  4. 仅在当前范围内渲染标记。假设有 500k 条记录。如果将它们全部发送到客户端,那将是at least 500,000 * 47bit ~ 2.8MB 编码为字符串/JSON 的数据,这会更大。因此,与其发送所有记录,不如等待 Google 地图的 idle 事件,然后仅从服务器加载当前范围内的记录/标记。请参阅 Andrew 在 cmets 中发布的链接。
  5. 当然,gzip HTTP 响应。

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2016-06-17
    • 2012-03-30
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2020-11-20
    相关资源
    最近更新 更多