理解缓存

背景:

H5页面在app中遇到了缓存问题,现象是页面一直加载打不开,有的手机清除缓存可以打开,有的需要卸载,都是ios,概率较小。发现问题不知道如何排查,于是学习和前端相关的缓存内容。

1.客户端 & webview的缓存

ios端回复:原生没有在代码中写和缓存相关的东西,只是配置了启用缓存,一分钟后过期,过期后会清理html,不会清理js。由此推测:缓存是浏览器产生的,那和浏览器相关的缓存都有哪些?


2.浏览器-html页面和http接口缓存

Q:缓存在做什么?
A:缓存读取是浏览器在向服务器发送请求资源之前,先查询一下本地缓存中是否存在需要的资源,如果存在,那便优先从缓存中读取。当缓存不存在或者过期,再向服务器发送请求。

html中http-equiv属性设置.png
get请求头的cache-control属性设置.png

其中cache-control与pragma属性一致,都是http的缓存策略。pragma是HTTP/1.0标准,基本只用于IE

A:具体cache-control都有哪些属性?
Q1: MDN-HTTP
Q2:生动的例子

A:缓存存在哪里?
Q:Memory Cache—内存的缓存、Disk Cache—硬盘的缓存

A:实际场景运用?
Q:频繁变动的资源—Cache-Control: no-cache、不常变化的资源—Cache-Control: max-age=31536000(一年)

\color{#f38}{权重:}http请求头缓存设置 > html文档http-equiv属性设置
\color{#f38}{tip:}设置了最大缓存时间,但为了解决更新的问题,就需要在文件名或url中添加 hash、 版本号、时间戳等动态字符,从而达到更改引用 URL 的目的,让之前的强制缓存失效


3.CDN缓存

关键字:内容的储存和分发 / 静态资源 / 遵守http标准协议

当Cache-Control设置了public,表示它既可以存在共享缓存,也可以被存在本地缓存,共享缓存,指客户端和服务器之间的缓存,即CDN


凑合看吧.png

举几个栗子

Cache-Control: public max-age=3600 
//本地缓存和 CDN 缓存均缓存 1 小时;
Cache-Control: private immutable
//不能缓存在 CDN,只能缓存在本地。并且一旦被缓存了,则不能被更新;
Cache-Control:no-store
//不能缓存
Cache-Control: no-cache 
//协商缓存。
Cache-Control: public max-age=3600 s-maxage=7200 
//本地缓存 1 小时,CDN 上缓存 2 小时;
Cache-Control: public max-age=3600 proxy-revalidate  
//本地和 CDN 均缓存 1 小时。但如果CDN收到请求,要向服务器确认缓存是否是最新内容。
4.浏览器DNS缓存

关键字:域名系统协议

凑合看吧2.png

浏览器会在本地会建立一个DNS缓存,在一段时间里,都是使用本地的缓存映射,从而减少向运营商DNS服务器查找和解析的时间。

各个浏览器的dns缓存时间,会有一定的差别。
在chrome浏览器中查看dns的缓存时间的方式:chrome://net-internals/#dns

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络特有的延迟以及数据传输的成本,制约互联网快速获取Web资源。为此,HTTP协议引入缓存以空间换时间,使浏览器缓...
    大头8086阅读 3,108评论 2 12
  • 解析URL 输入URL后,会进行解析(URL的本质就是统一资源定位符) URL一般包括几大部分: protocol...
    小超人的前端之路阅读 780评论 0 1
  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 1,239评论 0 3
  • 是中国的传统节日,举国欢庆,万家团圆,共度美好佳节。 春节还没到,许多人都捺不住自...
    森林_3990阅读 175评论 0 0
  • 外婆家有一只叫做健健的可爱小猫咪,还有一只叫做菠萝的可爱小狗,我非常喜欢它们。 这只小狗的名字叫菠...
    阳光成子阅读 190评论 0 2