记离线缓存(manifest)一大坑,断定其只适用于静态网站或离线应用
2021-02-17 01:22
今天看了离线缓存(manifest)
方面的资料,兴冲冲地就想给自己的网站用上。待我把代码都写好部署上服务器,并测试过OK的时候,在SegmentFault刷了一把manifest方面的问答,才发现这个大坑:manifest除了缓存manifest.appcache
文件所指定的资源外,还必定会缓存当前的html页面。
具体来说:
当用户第一次访问页面,会从服务器上拉取html页面,以及其它静态资源。
浏览器会把html页面,连同
manifest.appcache
文件,连同manifest.appcache
文件里所指定的静态资源一并存入Application Cache
。当用户第二次访问该页面,
manifest.appcache
文件里所指定的静态资源就不需要重新加载了,直接从cache读出。这很好,问题是,当前的html页面也从cache直接读出来了,根本就不管线上的版本呀!这造成的问题是,网站如果更新了,用户的浏览器根本不知道,还显示cache里的版本。
网上有所谓的利用的方案,但由于年代久远,已不适用于当前的浏览器了。
冷静下来想想,这到底是不是个Bug呢?我认为不是,正如manifest的中文译名——离线缓存,这个功能根本就是设计给离线应用(例如Hybrid App
)的:用navagator.online
来判断当前用户是否联网,如果离线则任由浏览器/WebView读取缓存,如果在线则清空缓存后刷新页面让浏览器/WebView读取线上最新版本的代码。
另外,采取静态化策略的网站,也很适合采用manifest,因为静态化后的网站实际上就已经属于静态网站了,让浏览器读缓存可比从服务器读静态html还省性能。而如果网站需要更新的时候,在重新做完静态化(重新生成静态html文件)后,更改一下manifest的版本号,就可以刷新缓存了,运维成本也不高。
上一篇:ajax使用
下一篇:vue的常见js书写操作
文章标题:记离线缓存(manifest)一大坑,断定其只适用于静态网站或离线应用
文章链接:http://soscw.com/index.php/essay/56353.html