缓存是性能优化中最简单的解决办法,项目中数据量较多的情况下,浏览器容易缓存大量数据,需要用户多次手动清除缓存,对于用户非常不友好,项目中使用了expires 和 cache-control 相互配合,大大提高了页面刷新效率。
理解E-tags:简单来说就是http请求中用以判断前端请求文件是否改变的标记,由服务器决定etag码。 如果匹配到文件未修改则返回304调用缓存文件,匹配到修改则返回200表示返回成功,这样的优势在于前后端交互数据量小而快速,而问题的关键在于:分布式服务器机制。
etags是一种类似token一样的验证机制,只能与一台服务器验证,当存在多台服务器时,etag存在失效或需要间接验证的情况。
解决方式
前后端配合,前端比较明智得做法是:expires跟cache-control进行搭配使用,根据项目本身的更新周期,例如一周内不会更新,那么expires可以配置为一周后的日期,那么这段时间内,访问网页的时候,都不会发生http请求,都会直接读取浏览器的缓存,这样响应速度将会大大提高。cache-control可以设置为no-cache,这样在资源过期之后,浏览器每次加载资源的时候会询问服务器当前资源是否过期,非过期资源将会继续沿用缓存,虽然发生了http请求,但是不用重新下载数据,这样性能依旧可以保持相对较高的水准。
by the way,etag另一种用途:代替cookie,etag完全由浏览器管理,无法进行人为修改。类似Hulu,可以欺骗浏览器持续发送相同etag码,即使在未登录的情况下,也能追踪用户操作,进行相应推荐。
文章参考:blog.csdn.net/handsomexia…
视频参考:youtu.be/TgZnpp5wJWU