Advertisement

前端浏览器缓存知识梳理(1),web开发学习教程

阅读量:

提升性能,打开本地资源肯定会比请求服务器来的快。

3.减少带宽消耗,当我们使用缓存时,只会产生很小的网络消耗,至于为什么打开本地资源也会产生网络消耗,下面会有说明。

Web缓存种类: 数据库缓存,CDN缓存,代理服务器缓存,浏览器缓存。

所谓浏览器缓存其实就是指在本地使用的计算机中开辟一个内存区,同时也开辟一个硬盘区作为数据传输的缓冲区,然后用这个缓冲区来暂时保存用户以前访问过的信息。

浏览器缓存过程: 强缓存,协商缓存。

浏览器缓存位置一般分为四类: Service Worker–>Memory Cache–>Disk Cache–>Push Cache。

1. 强缓存


强缓存是在访问 URL 时不会主动发起请求以获取资源,并且能够直接获取该资源并返回 HTTP 200 状态码。

如何设置强缓存?

当用户首次访问页面时

在第二个请求发起时,在第一个响应阶段中:

  1. 浏览器根据请求参数进行分析;
  2. 若满足强缓存条件,则立即发送状态码200,并获取本地缓存中的数据;
  3. 将响应参数包含于Request头中的Header字段;
  4. 判断其是否满足协商缓存条件;
  5. 若符合条件,则发送响应代码304;
  6. 如果上述条件不满足,则服务器会发送新的资源信息

expires

代表HTTP1.0中用于管理网页缓存的字段,在其值上相当于一个时间戳,并准确地说就是格林尼治时间;服务器返回的结果中包含该请求结果的有效时长信息;这意味着当再次发送请求时,在未超过指定的有效期前可以直接使用该缓存数据;而一旦过期,则需要重新发起请求获取最新内容。

存在一个缺点, 也就是该方法是基于本地时间进行判断是否过期的, 并且这种本地时间是可以自行更改的.

Cache-Control

代表HTTP/1.1协议中用于管理网页缓存机制的重要字段,在多个Cache-Control指令同时被设置的情况下,默认情况下其中Cache-Control指令的优先级通常高于其他参数。

public:资源客户端和服务器都可以缓存。

privite:资源只有客户端可以缓存。

no-cache:客户端缓存资源,但是是否缓存需要经过协商缓存来验证。

no-store:不使用缓存。

max-age:缓存保质期。

Cache-Control使用了max-age相对时间,解决了expires的问题。

pragma

在HTTP1.0标准中存在一个字段用于阻止缓存机制工作,在其配置中设置为no-cache值时等同于将Cache-Control头设置为no-cache参数

2. 缓存位置


上文我们提到,在实现强缓存时会将存储空间分配至内存缓存区和磁盘缓存区之中。那么哪些资源会被放置于内存缓存区?又有哪些会置于磁盘缓存区?

存储图像和网页类别的资源主要以disk cache的形式存在。而操作系统中缓存的文件大部分都会被保存到memory cache中。具体实现上,浏览器会根据各资源的利用率动态分配存储空间。

经观察发现memory cache请求的时间全部为零毫秒,真是令人惊叹!接下来我会对这方面进行详细梳理。

当在浏览器中查询缓存时,会依次进行如下操作:Service Worker->Memory Cache->Disk Cache->Push Cache.

1. Service Worker

是一种运行于浏览器后端的独立线程,通常用于实现缓存功能。如果使用 Service Worker,则传输协议必须采用HTTPS。由于Service Worker涉及请求拦截功能,则必须采用HTTPS协议以确保安全性。Service Worker的缓存与普通浏览器内建的缓存机制有所不同,在此模式下我们可以自由控制哪些文件被缓存、如何匹配符合条件以及如何读取并管理这些数据,并且这种缓存操作会持续进行下去。

2. Memory Cache

内存中所存储的数据主要包括当前页面已获取的所有资源信息,
包括但不限于已被下载的样式文件、JavaScript文件以及图片文件等。
从内存中读取数据显然比从磁盘上读取更快,
尽管内存缓存具有快速访问的优势,
但其持续性较短,
随着进程被终止或关闭而被释放。
当用户关闭某个Tab窗口时,
相应的内存缓存也会随之被清除或释放。

3. Disk Cache

缓存单元以硬盘作为存储介质进行数据保存时,在读取速度方面稍逊于其他优化方案;然而其优点在于任何类型的数据都能够被保存于磁盘上,并相较于Memory缓存而言,在容量和持久性的表现更为出色。

从所有浏览器的角度来看(即所有的网络浏览器),Disk Cache 的覆盖范围占比较大(比例最高)。系统会通过HTTP Header中的各项字段信息来分析各个资源的状态——确定哪些资源需要进行缓存存储;确定哪些资源已经过时而无需再获取;以及判断那些已失效的内容是否需要重新获取最新的数据)。此外,在跨站访问的情况下(即同一个URL在不同网站上的访问),一旦某个特定地址的内容被硬盘存储下来(即处于被硬盘存储的状态),该内容就不会再进行数据请求(即不再访问原始服务器获取最新数据)。总体来说,在大多数情况下(即大部分场景下)这些内容都是通过Cache的方式来处理和获取

相比而言,memory cache的速度明显快于disk cache.举例来说,从远程 web 服务器直接获取文件可能会花上500毫秒(即半秒),而内存访问仅需100纳米,其中,L1缓存是最快速且规模最小的 CPU 缓存,其寻址时间仅为 half a nanosecond.

很神奇的,我们又看到了一个prefetch cache,这个又是什么呢?

prefetch cache(预取缓存)

link标签上带了prefetch,再次加载会出现。

预加载的方式称为prefetch,在其被标记时会触发浏览器在空闲时段自动执行加载操作

4. Push Cache

该术语(Push Cache)属于HTTP/2协议的一部分。在三重缓存机制均未触发命中的情况下才被激活使用。该机制仅存在于会话层面,在会话终止后自动失效。其有效时间极短,在主流浏览器如Chrome中通常仅持续约5分钟,并非严格遵循HTTP头部中的缓存指令。

5. CPU、内存、硬盘

这里提到了硬盘,内存,可能有些小伙伴对硬盘,内存没什么直观的概念。

CPU、内存、硬盘都是计算机的主要组成部分。

CPU:中央处理器(CntralPocessingUit)的缩写名称也称处理器芯片是现代计算机体系中不可或缺的核心组件它负责接收并执行指令序列完成数据处理与系统管理的任务。计算机系统主要由中央处理器执行指令序列完成数据处理与系统管理以确保各组件协调运行保证整体系统的稳定性和高效运作

硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。

存储单元:主要承担与CPU之间的数据交换处理任务,并负责硬盘等存储设备中的数据传输工作。其主要特点包括体积较小、运行速度较快,在有电的情况下能够保存数据,并在关机后自动清空其中的数据内容。

3. 协商缓存


在强缓存失效的情况下

主要有以下两种情况:

协商缓存生效,返回304

协商缓存失效,返回200和请求结果

如何设置协商缓存?

Last-Modified / If-Modified-Since

Last-Modified是在服务器处理请求期间返回表示该资源文件最后一次修改的时间戳的信息。

当客户端再次发起相同的请求时,则会携带上一次响应包含的信息。其中包含着一个特殊字段——若修改过的话——即所谓的"若未更改"(If-Modified-Since)字段。当服务器接收到这个请求时会检查其头部中的'若未更改'(If-Modified-Since)这一特定字段是否存在。如果存在的话则会将其内容与当前资源最后一次在服务器上的修改时间进行比较。如果发现当前资源在服务器上的最新修改日期晚于客户端提供的这一日期范围则会重新发送最新的版本过来;否则则发送带有'无更改'状态码(304)的回答

简单介绍一下自己。我于2013年毕业于上海交通大学。之前在小公司工作过,并且还曾前往华为、OPPO等大厂学习和实习。自2018年以来一直在阿里巴巴工作至今。

意识到大多数前端开发人员,在职业发展过程中都面临着自我提升的挑战:他们要么选择通过自主学习逐步积累经验和技术能力(autonomous learning),要么选择参加系统化的培训课程(参加系统课程)。然而,在当前高昂的培训机构费用背景下(高昂的培训机构费用),许多人感到难以承受这样的经济压力(较大的经济压力)。缺乏系统性的自学往往难以高效提升(缺乏系统性的自学难以高效提升),并且耗时冗长(耗时冗长);同时容易在技术瓶颈面前停滞不前(天花板效应明显)。

鉴于此,本人进行了精心汇编整理一份《2024年Web前端开发全套学习资料》,其目的在于帮助到那些渴望自我提升却因缺乏方向感而感到困惑的朋友,并致力于减轻大家的学习压力.

img

不仅针对初学者提供的基础学习材料,还为有3年以上经验的开发者设计了深入学习和提升的专业课程。这些课程覆盖了95%以上的前端开发知识点,并且系统性地构建了完整的知识体系。

因为文件较大仅对部分目录进行截图展示每个节点中均包含大厂面经学习笔记源码讲义实战项目以及讲解视频并且会持续进行更新

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前15.PNG
前16.PNG

因为文档内容过于冗长
为了解决阅读体验受到影响的问题
为了节省时间并避免遗漏重要信息
更多前端资料可以点此处免费获取

可以扫码获取!!(备注:前端)**

最后

[外链图片转存中…(img-woLMJR6I-1712314428032)]

[外链图片转存中…(img-f8lTEgmZ-1712314428032)]

因文档内容较为丰富而可能会影响阅读体验,在此仅作为参考提供一部分内容。

全部评论 (0)

还没有任何评论哟~