前端项目中 浏览器缓存的更新不及时问题及解决方法 web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

前端开发中会遇到的问题,我们更新已上线的项目,用户的浏览器显示的却是旧版的页面,没有及时获取到我们更新的资源,这是什么原因造成的?此时,如果用户刷新一下页面,就得到更新后的资源,又是为什么?

答案是浏览器缓存

浏览器缓存是前端优化的一个重要问题,缓存可以带来很多好处:

(1)减少冗余的数据传输,节省带宽;

(2)减轻服务器的请求负担,有缓存就可以少向服务器发送请求,尤其是对于一些访问量大的网站这点还是很重要的;

(3)资源从缓存中读取,无需向服务器发送请求再等待返回,加快了客户端的访问速度。

但是缓存同样给前端带来了一个很严重的问题,就是上面所说的项目更新的问题。如果项目更新了,但是用户访问时浏览器读取的是缓存资源,那么用户就获取不到最新的页面,影响用户使用。

接下来就从浏览器缓存开始分析出现项目更新问题的原因,并给出相应的解决方法。

浏览器缓存主要指http缓存,其机制是根据http报文的缓存标识进行相应操作。

一、http状态码

在讨论浏览器缓存之前,我们先看看网页相关的http状态码,打开控制台,在Network下捕捉请求,注意Status和Size栏,会看到200 from disk cache,200数值大小。

前端项目中 浏览器缓存的更新不及时问题及解决方法 web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

刷新页面,会看到,304  数值大小,200  from memory cache。

前端项目中 浏览器缓存的更新不及时问题及解决方法 web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法

这几个有什么不同呢?200和304是常见的两个http状态码,200表示文件发生改动,304表示文件未改动,都是服务器返回告知的。在上面两张图中,我们注意到,有些200是灰色的,灰色的200表示没有向服务器发送请求,而是直接从缓存中读取。从缓存中读取又分为从内存(from memory cache)中读取还是从磁盘中读取(from disk cache)。

总结一张表。

200 from memory cache

 

状态码是灰色的,从内存中读取之前已经加载过的资源,不请求服务器,页面关闭时,资源就会被内存释放,再次打开相同页面不会出现此类情况,在同一页面刷新才会出现。一般脚本、字体、图片会存在内存当中

 

200 from disk cache

 

状态码是灰色的,从磁盘中读取之前已经加载过的资源,不请求服务器,页面关闭不会被释放,这部分资源存在电脑磁盘里,只有用户手动清除浏览器缓存的时候才会释放。一般非脚本会存在内存当中,如css等

 

200 数值大小

 

从服务器下载最新资源,数值是从服务器获取的全部资源大小

 

304 数值大小

 

访问服务器,发现资源没有更新,使用本地资源。数值是与服务器通信报文的大小,并不是资源本身的大小。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjwwj.html