说起缓存可谓是让程序员爱恨交加!我结合项目经验谈谈自己的一些见解。

在我们更新完已上线的项目后,用户浏览器显示的确实旧版的页面,没有及时获取到我们更新的资源,此时用户刷新一下页面,就得到了更新后的资源,又是为什么呢?

答案就是浏览器缓存

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

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

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

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

但是缓存也同样给前端带来了一个很严重的问题,就是上面所说的项目更新的问题。如果项目更新了,用户浏览器读取的是缓存资源,虽说刷新或者清除浏览器缓存可以获取最新的页面,但是做开发常说的一句话叫做:要把用户当傻瓜一样对待,能少一步绝不多一步(冒犯了冒犯了,立马道歉)

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

浏览器有三级缓存原理

1.先查找内存,如果内存中存在,从内存中加载;

2.如果内存中未查找到,选择从硬盘获取,如果硬盘有,从硬盘加载;

3.如果硬盘中未查找到,那就进行网络请求,加载到的资源缓存到硬盘和内存;

如上常见情况就是我们打开控制台的Network发现资源加载情况是200 from disk cache,这很明显浏览器没有请求新的资源,那么有没有办法去解决这种情况?

  浏览器缓存(强制缓存和、协商缓存也叫对比缓存

1.强制缓存

见字明意,强制缓存就是用户第一次访问页面之后,浏览器将数据存在缓存之中,在过期时间之内,都不会请求服务器,是否使用强制缓存存在于资源是否过期,该过期时间从第一次请求服务器响应头中获取,如果在过期时间内,从缓存中读取,如果超出过期时间,则使用协商缓存

控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。

2.协商缓存

从字面上意思主在协商,在第一次请求服务器时,服务器会返回一个资源的缓存标识,一起存到浏览器的缓存数据库,第二次请求资源时,浏览器会首先将缓存标识发送给服务器,服务器处理标识是否匹配,如果不匹配表示资源有更新,服务器会将新数据和缓存标识一起返回浏览器;如果匹配,表示资源没有更新并且返回304状态码,浏览器读取本地缓存服务器中的数据
        与协商缓存相关的字段是 Last-Modified/If-Modified-Since、Etag/IF-None-Match

Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304

强缓存与协商缓存的区别
缓存类型 获取资源形式 状态码 发送请求到服务器
强缓存 从缓存取 200(from cache) 否,直接从缓存取
协商缓存 从缓存取 304(Not Modified) 否,通过服务器来告知缓存是否可用
用户行为对缓存的影响
用户操作 Expires/Cache-Control Last-Modied/Etag
地址栏回车 有效 有效
页面链接跳转 有效 有效
新开窗口 有效 有效
前进回退 有效 有效
F5刷新 无效 有效
Ctrl+F5强制刷新 无效 无效

如文章开头所属,代码更新到线上后用户浏览器不能自行更新,我们不能要求客户在系统更新后都进行一次缓存清理的操作。 到底该如何解决呢? 在资源请求的URL中增加一个参数,比如:js/mian.js?ver=0.7.1。这个参数是一个版本号,每一次部署的时候变更一下,当这个参数变化的时候,强缓存都会失效并重新加载

让开发又爱又恨的缓存相关推荐

  1. 让你又爱又恨的推荐系统--程序猿篇

    正文共8957个字,13张图,预计阅读时间23分钟. 又爱又恨的推荐系统 作为一名程序猿,一直对推荐系统比较感兴趣,最近看到一个用户的吐槽: 又爱又恨 推荐系统的应用场景,我相信在日常生活中大家基本都 ...

  2. 专访傲游CEO陈明杰:为何微软对IE8“又爱又恨”

    随着IE 8 Beta 2和Google Chrome的推出,浏览器战场注定会变得更加硝烟弥漫,就连世界著名前端大师.JSON的创立者Douglas Crockford也忍不住在本月的一次技术论坛上高 ...

  3. 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】

    前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...

  4. 减持后大笔收购,汽车之家为何让中国平安又爱又恨?

    减持后大笔收购,汽车之家为何让中国平安又爱又恨? 公司上市后股东减持一部分股票本是常规操作,但刚减持一个月又大笔收购的实属少数. 近日中国平安就上演了这样一出"好戏". 资料显示: ...

  5. 又爱又恨的正则表示式

    正则表达式 谈起到正则表达式,很多开发人员都会感觉到又爱又恨,爱的是什么呢?恨的又是什么呢?爱的是正则表达式确实在开发当中非常有用,可以处理很多棘手的问题, 恨的是正则表达式确实很难理解,又很难记忆, ...

  6. 让我又爱又恨的Java《打工人的那些事》

    让我又爱又恨的Java<打工人的那些事> 概述 我从事Java行业,差不多有6年了. 对于Java,我是又爱又恨.那么,爱从何说起.恨又从何而谈. 下面我会一一道来. 始于ACM 2014 ...

  7. 终于离开了让我又爱又恨的外包圈,附赠外包圈趣事及混外包圈秘籍

    从年本科毕业,我就一直在外包圈工作.直到前几天终于拿到了一份满意的offer,离开了这个让我又爱又恨的圈子. 说实话,对于外包的经历,我想我是个异类: 外包的工作我一直干的比较满意,甚至薪水也算满意, ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

    基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据 转载于:https://github.com/Meowv/Blog 在日志记录中使用的静态方法有人指出写法不 ...

  9. 《花落红尘》:对两性社会非爱即恨的文学消解

    李素红是个我比较陌生的女作家,读了她的<花落红尘>(作家出版社2011年版),我非常惊讶.据说作者是搞书法的,且成绩斐然,还有自己的公司,她的写作几乎是在业余时间.由此我想到了" ...

最新文章

  1. github自己的仓库给别人上传代码的操作
  2. 基于redis的cas集群配置(转)
  3. python开发需要掌握哪些知识-学习Python应该掌握哪些知识点?
  4. Android SharedPreferences登录记住密码
  5. [LeetCode] Move Zeroes - 整数数组处理问题
  6. 今天,公司架构师跟我分享多年的私货 | 进阶之路必读书籍(附下载链接)
  7. odoo10参考系列--网络控制器(Web Controllers)
  8. MVVM 实战之计算器
  9. Redis数据结构及内部编码
  10. LaTeX插入图片时,图总是置顶的解决办法
  11. Windows错误恢复无限重启;开机后灯亮风扇转下停下
  12. osm 搭建离线地图_利用OpenStreetMap(OSM)数据搭建一个地图服务
  13. 网页计算机谈音乐,如何用windows电脑录制网页上或电脑中自己的音乐
  14. mysql压缩包安装设置密码
  15. 计算机专业Java毕设怎么做
  16. 自然语言处理学习笔记-lecture08-语义分析
  17. Android与GNU体系
  18. Docker自定义镜像上传阿里云
  19. 黑盒测试技术(Decision Tables 决策表法,又称判定表法)——软件质量保证与测试
  20. ascii unicode utf8 gkb之间的关系

热门文章

  1. WM_CTLCOLOR消息重载
  2. truetype字体怎么转换成普通字体_TrueType字体作用|如何在文档嵌入 TrueType 字体中...
  3. 博客上怎么根据搜索ID搜索其它人
  4. CAPI 初探及使用小结(1)
  5. 30句瞬间使你清醒的话,别再假装糊涂下去了!
  6. 树模型之三种常见的决策树:CART,…
  7. 【支线】输电杆塔识别-YOLO v5在Aidlux的部署
  8. html5+css3学习笔记(一)
  9. 主板声卡坏了会不会有电流声_不要小瞧十几块钱的USB声卡!
  10. 1.初始PR,怎么导入素材和添加效果处理?