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