浏览器资源请求中 disk cache 与 memory cache

浏览器资源请求中 disk cache 与 memory cache

在浏览器 NetWork 中,总是会看到有 memoryCache 与 diskCache,只是大概知道它们是什么,
这里有时间专门去查看了多份资料,明白了更多他们的区别和特质,以问答的形式记录一下;
图片就不放了,可以找个网站在 NetWork 上自己看看。

memory cache 与 disk cache 分别是什么?

  • memory cache 是浏览器存储在 RAM 中的缓存资源
  • disk cache 是浏览器缓存在设备磁盘内存中的资源

memory cache 与 disk cache 各自的特点是什么?

  • memory cache

    读取速度快、存储空间小、存储的文件 size 一般也较小、时效较短当浏览器 tab 关闭即释放;

  • disk cache

    读取速度较快(小于 memory cache)、存储空间大、存储的文件 size 一般较大、时效较长当浏览器关闭仍然存储在磁盘中;

浏览器分别在什么时候使用这两个缓存?

  • memory cache

    频繁访问的派生资源,包括:图片、js 脚本、css 等较小 size 文件时,大多会存储在 memory cache 中;
    当 tab 栏过多,内存不够时,最近最少使用 tab 栏的缓存将通过LRU算法清除;

  • disk cache

    不经常改动的资源,包括:图片、js、css 等较大 size 文件时,一般通过服务端通过 cache-control 控制;

memory cache 与 disk cache 由谁来控制?

  • memory cahce 由浏览器程序控制,开发人员无法控制,也不受 HTTP 协议头的约束,除了no-store
  • disk cache 由服务端控制,可通过配置 nginx 等服务器 或 在服务端代码中修改 cache-control 存储配置;

为什么 图片、js、css 缓存有些是 memory cache ,有些是 disk cache?

图片、js 在首次访问后,便会将其存入memory cache,并且基本都会在disk cache中也会有备份;
在刷新网页的时候,将会首先从memory cache中获取资源;memory cache中没有,会继续到disk cache寻找;
当我们关闭tab,memory cache便清除了,如果我们再次访问该网站,将会从disk cache获取图片和js资源;
css基本上都是disk cache;
html文档不会被缓存;

一些规律

  • 图片、js 等文件首选会使用 memory cache 缓存;当文件过大或者内存不足时,将使用 disk cache 进行缓存;
  • 浏览器通常会根据资源的类型和使用频率来决定使用哪种缓存方式;
  • CSS 和 JavaScript 文件通常会被缓存以加快页面加载速度;
  • 而图片等媒体资源则可能根据需要选择不同的缓存方式 ‌;

遗留问题

最终因为没有浏览器相关存储原理的具体资料,可能也不是一两条规则判断什么时候是memory cache 或 disk cache,
后续将需要进一步学习相关的两者缓存的资料

### HTTP状态码200 OK从内存缓存和磁盘缓存的区别 对于HTTP请求返回的状态码`200 OK`,当资源来自不同类型的缓存时,其表现形式会有所不同。具体到内存缓存Memory Cache磁盘缓存Disk Cache),主要区别体现在以下几个方面: #### 资源加载速度差异 - **内存缓存**:由于数据存储于RAM中,因此读取速度极快,几乎可以即时响应浏览器的渲染需求。这种方式能够显著减少页面加载时间,提供更流畅用户体验[^1]。 - **磁盘缓存**:相比之下,即使硬盘的速度已经相当可观,但仍远不及内存访问效率高。不过,在实际应用环境中,这种延迟通常不会影响整体性能太多。 #### 缓存机制的不同触发条件 - **内存缓存**:一般情况下,只有最近频繁使用的资源才会被优先保存至内存空间内;一旦超出设定容量,则依据LRU(Least Recently Used)算法淘汰旧条目。这意味着并非所有已下载过的文件都会进入此层缓冲区。 - **磁盘缓存**:凡是经过服务器验证并允许长期保留下来的静态资产,默认会被写入本地储存设备上供后续调用。只要未达到预设有效期之前,每次重复获取相同URL路径下的对象都将直接命中此处而非重新发起网络请求。 #### 对应场景适用性分析 - 当用户首次浏览网页或长时间未再次打开同一站点时,往往依赖于磁盘级别的持久化记录来加速初次呈现过程; - 如果是在短时间内多次刷新当前页签或是切换不同的子页面间操作,则更多受益于瞬态性质的记忆体暂存策略所带来的高效能优势。 ```python import requests from datetime import datetime def check_cache_type(url): response = requests.get(url) headers = response.headers if 'Cache-Control' in headers: print(f"Resource is served with {headers['Cache-Control']}") elif 'Expires' in headers: expire_time = datetime.strptime(headers['Expires'], '%a, %d %b %Y %H:%M:%S GMT') current_time = datetime.utcnow() time_diff = (expire_time - current_time).total_seconds() if time_diff > 0: print("Resource may be cached on disk.") else: print("Resource has expired.") check_cache_type('https://example.com') # Replace this URL as needed. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值