只是好奇,Google Maps API v3 javascript 是否会缓存在本地服务器上?
因为,有时我的 Intranet 页面加载速度很慢,因为 Internet 连接速度较慢。否则,它将从本地服务器加载文件并仅在发出地图请求时减慢速度。
我什至准备好运行一个 cron 作业来不时更新 javascript 文件。
感谢您的任何意见。
只是好奇,Google Maps API v3 javascript 是否会缓存在本地服务器上?
因为,有时我的 Intranet 页面加载速度很慢,因为 Internet 连接速度较慢。否则,它将从本地服务器加载文件并仅在发出地图请求时减慢速度。
我什至准备好运行一个 cron 作业来不时更新 javascript 文件。
感谢您的任何意见。
“原样”是不可能的。
当您向 Google 请求脚本时,他们会随脚本发送标头,并且这些标头包含“no-cache”指令。
因此,如果您希望它们可缓存,则必须创建一个代理。您无需将脚本 src 指向 Google,而是将其指向您的服务器。然后,您的服务器调用 Google 并将响应发送回客户端。
这样您就可以控制 HTTP 标头和缓存。您也可以对脚本内容进行缓存,以减少与 Google 的连接。
我不会建议有人在生产或关键任务网站上这样做。所有 Google API 都会经常更新,并且或多或少地绑定在一起。如果某些东西与其他东西不同步,那么您就很难跟踪您手上的错误。
希望有帮助。
编辑:我听说您将脚本放在HEAD
文档的部分中。也许那会损害您的“感知”页面加载时间。尝试将脚本的下载移动到</body>
标签和地图初始化之前onload
的页面事件。
麦克风
截至 2016 年,该 js 以“Cache-Control: public, max-age=1800” 标头返回,因此至少缓存了半小时。
恕我直言,您无法缓存它。API 脚本调用 Google 服务器上的对象。最多,您可以捕获结果并将它们缓存为图像(但随后您会失去交互性)。
如果可以缓存 GMap 结果,人们只会在本地缓存 Google 的整个数据库,我认为这不是用户协议的一部分;)。
如果您想要离线地图,则必须使用非交互式图像,或购买地图服务器。
一个不会让您违反 Google 服务条款的选项是使用 OpenLayers 脚本保留 OpenStreetMap 切片的本地缓存以供查看它们。基本上,使用免费数据来创建您自己的地图服务器。
如果有对您的 Intranet 很重要的特定兴趣点,您可以确保它们位于 OpenStreetMap 中,并自己设置具有您需要的功能的渲染服务器。毕竟,将一个地区的每所学校覆盖在一些 png 上将需要更多的工作,而不是仅仅显示由其中的学校制作的 png。
如果您的地图服务器在周末获取/生成图块,而不是一直使用 Google Map API,那么慢速外部连接的延迟也会大大减少。