启发式缓存

·  阅读 2257
启发式缓存

这是我参与8月更文挑战的第5天,活动详情查看: 8月更文挑战

前言

作为一个前端开发人员,怎么让自己的页面能够快速展示在用户面前是一个老生常谈的问题了。页面要秒开,要提高用户体验,不得不提各种缓存技术了。从服务端缓存到CDN缓存,再到浏览器缓存,最后到代码层面的一些缓存。

这里我们主要说浏览器缓存,说起浏览器缓存,立马想到的两个词就是强缓存和协商缓存,关于这块网上也有很多资料介绍了,我觉得这个一文读懂前端缓存写的很全面,可以定期去看一看。

前端页面和资源是否被浏览器缓存,一般是由服务器通过设置http响应头部去告诉浏览器的。响应头是有两对相关联的头的,一个是HTTP/1.0的Expires和Last-Modified,另一对是HTTP/1.1增加的Cache-Control和Etag。

但是,如果一个请求没有设置任何的缓存信息,浏览器是不是就完全不会去缓存数据了呢??当然不是,在特殊情况下,浏览器是有一个默认的缓存策略。

启发式缓存

如果一个可以缓存的请求没有设置Expires和Cache-Control,但是响应头有设置Last-Modified信息,这种情况下浏览器会有一个默认的缓存策略:(Date - Last-Modified)*0.1,这就是启发式缓存。

目前看来,大部分浏览器都已经实现了,但是彼此也略有不同。

注:只有在服务端没有返回明确的缓存策略时才会激活浏览器的启发式缓存策略

启发式缓存会引起什么问题吗??

考虑一个情况,假设你有一个文件没有设置缓存时间,在一个月前你更新了上个版本。这次发版后,你可能得等到3天后用户才看到新的内容了。如果这个资源还在CDN也缓存了,则问题会更严重。

所以,要给资源设置合理的缓存时间。不要不设置缓存,也不要设置过长时间的缓存。强缓存时间过长,则内容要很久才会覆盖新版本,缓存时间过短,服务器可能背不住。一般带hash的文件缓存时间可以长一点。

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改