12

只是好奇,Google Maps API v3 javascript 是否会缓存在本地服务器上?

因为,有时我的 Intranet 页面加载速度很慢,因为 Internet 连接速度较慢。否则,它将从本地服务器加载文件并仅在发出地图请求时减慢速度。

我什至准备好运行一个 cron 作业来不时更新 javascript 文件。

感谢您的任何意见。

4

4 回答 4

16

“原样”是不可能的。

当您向 Google 请求脚本时,他们会随脚本发送标头,并且这些标头包含“no-cache”指令。

因此,如果您希望它们可缓存,则必须创建一个代理。您无需将脚本 src 指向 Google,而是将其指向您的服务器。然后,您的服务器调用 Google 并将响应发送回客户端。

这样您就可以控制 HTTP 标头和缓存。您也可以对脚本内容进行缓存,以减少与 Google 的连接。

我不会建议有人在生产或关键任务网站上这样做。所有 Google API 都会经常更新,并且或多或少地绑定在一起。如果某些东西与其他东西不同步,那么您就很难跟踪您手上的错误。

希望有帮助。

编辑:我听说您将脚本放在HEAD文档的部分中。也许那会损害您的“感知”页面加载时间。尝试将脚本的下载移动到</body>标签和地图初始化之前onload的页面事件。

麦克风

于 2009-12-27T05:50:05.053 回答
4

截至 2016 年,该 js 以“Cache-Control: public, max-age=1800” 标头返回,因此至少缓存了半小时。

于 2016-01-27T00:13:26.103 回答
3

恕我直言,您无法缓存它。API 脚本调用 Google 服务器上的对象。最多,您可以捕获结果并将它们缓存为图像(但随后您会失去交互性)。

如果可以缓存 GMap 结果,人们只会在本地缓存 Google 的整个数据库,我认为这不是用户协议的一部分;)。

如果您想要离线地图,则必须使用非交互式图像,或购买地图服务器。

于 2009-12-27T05:27:28.407 回答
0

一个不会让您违反 Google 服务条款的选项是使用 OpenLayers 脚本保留 OpenStreetMap 切片的本地缓存以供查看它们。基本上,使用免费数据来创建您自己的地图服务器。

如果有对您的 Intranet 很重要的特定兴趣点,您可以确保它们位于 OpenStreetMap 中,并自己设置具有您需要的功能的渲染服务器。毕竟,将一个地区的每所学校覆盖在一些 png 上将需要更多的工作,而不是仅仅显示由其中的学校制作的 png。

如果您的地图服务器在周末获取/生成图块,而不是一直使用 Google Map API,那么慢速外部连接的延迟也会大大减少。

于 2009-12-27T11:14:46.037 回答