好!所以我已经和一位谷歌代表谈过这个问题,但是由于我不是企业级别,他不能把我推向技术支持,并建议我使用SO来获得答案.这是问题......
在Google地图条款中,它声明了以下内容:
(b)没有预先获取,缓存或存储内容.您不得预先获取,缓存或存储任何内容,但您可以存储以下内容:(i)有限数量的内容,以便在您暂时(以下情况下)暂时提高Maps API实施的效果时超过30个日历日,安全,并且不允许在服务之外使用内容; (ii)Maps API文档特别允许您存储的任何内容标识符或密钥.例如,您不得使用内容来创建"地点"或其他本地列表信息的独立数据库.
这导致我最初认为谷歌不允许缓存任何类型的信息.但是,我读了以下内容:
何时使用客户端地理编码
基本答案是"几乎总是".由于地理编码限制是按用户会话进行的,因此随着用户群的增长,您的应用程序不会有达到全局限制的风险.除非您在用户会话中执行一批地理编码请求,否则客户端地理编码不会面临配额限制.因此,运行客户端地理编码时,通常不必担心配额.
存在两种用于客户端地理编码的基本体系结构.
完全在浏览器中运行地理编码和显示.例如,用户在您的页面上输入地址.您的应用程序对其进行了编码 然后您的页面使用地理编码在地图上创建标记.或者您的应用使用地理编码进行一些简单的分析.没有数据发送到您的服务器.这样可以减少服务器的负载,但不会让您了解用户的操作.
在浏览器中运行地理编码,然后将其发送到服务器.例如,用户输入地址.您的应用程序在浏览器中对其进行地理编码.然后,应用程序将数据发送到您的服务器.服务器响应一些数据,例如附近的兴趣点.这允许您根据自己的数据自定义响应,并根据需要缓存地理编码.此缓存允许您进行更多优化.您甚至可以使用地址查询服务器,看看您是否有最近缓存的地理编码,如果有,请使用它.如果不这样做,则不向浏览器返回任何结果,并让结果对结果进行地理编码并将其发送回服务器以进行缓存.
所以一方说你不能缓存,另一方告诉你,你应该.它说的另一个解决方案是在可能的情况下始终使用客户端,但这也会变成灰色区域,因为这两个示例都表明您必须拥有用户输入数据.如果jquery从div或span读取数据然后对信息进行地理编码,该怎么办?用户实际上没有完成地理编码,但它仍然在客户端完成?我正在尝试创建一个网站,其中包含一系列由用户生成的事件,并且此网站可能会非常加载,因此我正在尝试确定能够执行此操作的最佳做法.谷歌在这里建议,所以在你去之前说这是"偏离主题"请注意,这是他们说我发布的地方.
任何反馈将不胜感激.
第一个引用根本没有明确禁止缓存数据。关于可以缓存多少是不明确的(明确的数字是“有限数量”?),但它并不禁止缓存。
如果数据有助于提高网站性能,则允许您缓存数据,只要您保留数据的时间不超过 30 天,并且不以任何方式将其提供给除最初检索数据的服务之外的任何其他服务。
关于用户交互 - 如果您的用户明确输入一个页面,并期望他们将显示地理编码信息,我会认为这将实现“用户交互”。
作为我去年参与的一个项目的示例,我将其设置为执行以下操作: - 在地图上显示标记 - 如果用户单击标记,则会显示一个弹出窗口,其中包含来自缓存的数据(如果可用),否则显示地理编码将被执行,并且返回的信息将与缓存的日期/时间一起被缓存。
该网站的另一个页面全天以 5 分钟的间隔显示这些标记的历史记录。如果存在缓存数据(如上一部分所示通过单击地图标记),则会显示该数据,否则将执行地理编码并像以前一样缓存数据。用户单击运行报告(在我看来)足够的“用户交互”,不会被视为预取,因为用户必须在显示报告之前手动选择时间范围。
然后每天午夜运行一个 cronjob,它会检查每条记录以及超过 25 天的缓存数据并将其删除。
事实上,我缓存的标记位置远少于 10%(每分钟更新 20 多个标记,但报告每天可能在 3-5 个标记上运行,并且仅对每 5 个点进行地理编码数据)。