8

好的!所以我已经和谷歌代表谈过这个问题,但是由于我不是企业级的,他不能把我推给技术支持,并建议我使用 SO 来回答。这是问题...

在谷歌地图条款中,它规定了以下内容:

(b) 不得预取、缓存或存储内容。您不得预取、缓存或存储任何内容,除非您可以存储:(i) 有限数量的内容,以提高 Maps API 实施的性能,前提是您临时这样做(在任何情况下都不得超过 30 个日历日)、安全且不允许在服务之外使用内容的方式;(ii) Maps API 文档明确允许您存储的任何内容标识符或密钥。例如,您不得使用内容创建独立的“地点”数据库或其他本地列表信息。

这使我最初相信谷歌不会允许缓存任何类型的信息。但是,然后我阅读了以下内容:

何时使用客户端地理编码

基本答案是“几乎总是”。由于地理编码限制是针对每个用户会话的,因此您的应用程序不会随着用户群的增长而达到全局限制。除非您在用户会话中执行一批地理编码请求,否则客户端地理编码不会面临配额限制。因此,运行客户端地理编码,您通常不必担心您的配额。

存在两种用于客户端地理编码的基本架构。

运行地理编码并完全在浏览器中显示。例如,用户在您的页面上输入地址。您的应用程序对其进行地理编码。然后,您的页面使用地理编码在地图上创建标记。或者您的应用程序使用地理编码进行一些简单的分析。没有数据发送到您的服务器。这会减少服务器上的负载,但不会让您了解用户在做什么。

在浏览器中运行地理编码,然后将其发送到服务器。例如,用户输入地址。您的应用程序在浏览器中对其进行地理编码。然后应用程序将数据发送到您的服务器。服务器响应一些数据,例如附近的兴趣点。这允许您根据自己的数据自定义响应,如果需要,还可以缓存地理编码。此缓存允许您进行更多优化。您甚至可以使用地址查询服务器,查看您是否有最近缓存的地理编码,如果有,请使用它。如果不这样做,则不向浏览器返回任何结果,并让它对结果进行地理编码并将其发送回服务器以进行缓存。

所以一方面说你不能缓存,另一方面告诉你,你应该。它指出的另一个解决方案是尽可能始终使用客户端,但这也成为灰色区域,因为两个示例都表明您必须有用户输入数据。如果 jquery 从 div 或 span 读取数据然后对信息进行地理编码怎么办?用户实际上不会完成地理编码,但它仍然是在客户端完成的?我正在尝试创建一个站点,其中包含用户生成的大量事件,并且该站点可能会加载得很好,因此我正在尝试确定能够执行此操作的最佳实践。谷歌在这里建议,所以在你说这是“离题”之前,请注意,这是他们让我发帖的地方。

任何反馈将不胜感激。

4

1 回答 1

5

第一个引号根本没有明确禁止缓存数据。关于您可以缓存多少(明确是“有限数量”的数字是多少?)是模棱两可的,但它并不禁止缓存。

只要您将数据保留不超过 30 天,并且不以任何方式将其提供给任何其他服务(最初检索数据的服务除外),您就可以缓存有助于提高网站性能的数据.

关于用户交互 - 如果您的用户明确输入一个页面,并期望他们会看到地理编码信息,我会假设这将实现“用户交互”。

作为我去年工作的一个项目的示例,我将其设置为执行以下操作: - 在地图上显示标记 - 如果用户单击标记,则会显示一个弹出窗口,其中包含缓存中的数据(如果可用),否则为地理编码将被执行并且返回的信息将与缓存的日期/时间一起被缓存。

该网站的另一页显示了这些标记的历史,全天每隔 5 分钟显示一次。如果存在缓存数据(通过单击上一部分中的地图标记),则会显示该数据,否则将执行地理编码并像以前一样缓存数据。单击以运行报告的用户(在我看来)足够“用户交互”,不能算作预取,因为用户必须在显示报告之前手动选择时间范围。

然后每天午夜运行一个 cronjob,它会检查每条缓存数据超过 25 天的记录并将其删除。

实际上,我缓存的标记位置不到 10%(每分钟更新 20 多个标记,但每天可能在 3-5 个标记上运行报告,并且每 5 个点只有一次地理编码数据)。

于 2013-05-09T02:53:25.630 回答