Fork me on GitHub

浏览器缓存问题

最近一直思考一个问题。

http缓存问题。

很多都是使用meta设置expires 、Cache-Control这些字段,而然后再http相应报文头里可以看到所设置值。

但还是解决不了不缓存的问题,因为他们的主要作用还是再强缓存与协商缓存里。

资料:彻底理解浏览器缓存机制

 

而对不缓存的设置还不是很友好,可以说很不容易。

所以一些还是从请求url里寻找,比如加版本号什么的,只要让链接认为是新链接目标就达到了。

所以现在很多都是加版本号什么的。

而url就hash,这是无法实现的,因为hash在浏览器链接认为是一个锚点,定位当前页所在位置,不会上送,所以对链接没有变化,

那么链接不能识别为新链接。

 

history.replaceState(null, "page 2", window.location.href+"?v=01");
window.location.href = "h1.html";
history.replaceState方法只会替换当前链接到历史记录里,不会刷新的。
但后退到这里就会刷新了。
不过IOS或别的一些浏览器会有缓存优化,不会刷新历史记录的链接,那么可以使用onpageshow事件判断是否缓存手动刷新,只是可能会有闪动效果不太友好,
这里可以使用一些遮罩之类缓和一下。
window.addEventListener('pageshow', function(event) {
            if (event.persisted) location.reload();    //如果检测到页面是从“往返缓存”中读取的,刷新页面
        });

 













posted @ 2018-04-19 23:13  小数点就是问题  阅读(284)  评论(0编辑  收藏  举报