前端缓存机制

前端缓存机制详 阅读详情

浏览器的localStorage和sessionStorage等不属于浏览器的缓存概念,准确的说应该属于“浏览器的本地存储”不要讲两者混淆。
从缓存位置上来说一般有以下四种,依次是:
Memory Cache、Service Worker Cache、Disk Cache、Push Cache
在这里插入图片描述

  • MemoryCache,是指存在内存中的缓存。从优先级上来说,它是浏览器最先尝试去命中的一种缓存。从效率上来说,它是响应速度最快的一种缓存。浏览器秉承的是“节约原则”,我们发现,Base64 格式的图片,几乎永远可以被塞进 memory cache,这可以视作浏览器为节省渲染开销的“自保行为”;此外,体积不大的 JS、CSS 文件,也有较大地被写入内存的几率——相比之下,较大的 JS、CSS 文件就没有这个待遇了,内存资源是有限的,它们往往被直接甩进磁盘。一旦我们关闭 Tab 页面,内存中的缓存也就被释放了。
  • Service Worker, 是一种独立于主线程之外的 Javascript 线程。它脱离于浏览器窗体,因此无法直接访问 DOM。这样独立的个性使得 Service Worker 的“个人行为”无法干扰页面的性能,这个“幕后工作者”可以帮我们实现离线缓存、消息推送和网络代理等功能。我们借助 Service worker 实现的离线缓存就称为 Service Worker Cache。
  • Disk Cache(HTTP Cache),Disk Cache 也就是存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比之 Memory Cache 胜在容量和存储时效性上。在所有浏览器缓存中,Disk Cache 覆盖面基本是最大的。它会根据 HTTP Header 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。绝大部分的缓存都来自 Disk Cache,关于 HTTP 的协议头中的缓存字段,我们会在下文进行详细介绍。它又分为强缓存和协商缓存。
  • Push Cache,Push Cache 是指 HTTP2 在 server push 阶段存在的缓存。
    Push Cache 是缓存的最后一道防线。浏览器只有在 Memory Cache、HTTP Cache 和 Service Worker Cache 均未命中的情况下才会去询问 Push Cache。
    Push Cache(推送缓存) 是一种存在于会话阶段的缓存,当 session 终止时,缓存也随之释放。
    不同的页面只要共享了同一个 HTTP2 连接,那么它们就可以共享同一个 Push Cache。

浏览器缓存的两种方式

本地缓存阶段(也称强缓存):

先在本地查找该资源,如果有发现该资源,而且该资源还没有过期,就使用这一个资源,完全不会发送http请求到服务器;

协商缓存阶段(也称弱缓存):

如果在本地缓存找到对应的资源,但是不知道该资源是否过期或者已经过期,则发一个http请求到服务器,然后服务器判断这个请求,如果请求的资源在服务器上没有改动过,则返回304,让浏览器使用本地找到的那个资源;

Cache-Control

  • max-age(单位为s)指定设置缓存最大的有效时间,定义的是时间长短。当浏览器向服务器发送请求后,在max-age这段时间里浏览器就不会再向服务器发送请求了(强缓存)。
  • s-maxage(单位为s)同max-age,只用于共享缓存(比如CDN缓存)。比如,当s-maxage=60时,在这60秒中,即使更新了CDN的内容,浏览器也不会进行请求。也就是说max-age用于普通缓存,而s-maxage用于代理缓存。如果存在s-maxage,则会覆盖掉max-age和Expires header。
  • no-cache 指定不缓存响应,表明资源不进行缓存,但是设置了 no-cache 之后并不代表浏览器不缓存,而是在获取缓存前要向服务器确认资源是否被更改。因此有的时候只设置 no-cache 防止缓存还是不够保险,还可以加上 private 指令,将过期时间设为过去的时间。(no-cache 绕开了浏览器:我们为资源设置了 no-cache 后,每一次发起请求都不会再去询问浏览器的缓存情况,而是直接向服务端去确认该资源是否过期,即走协商缓存的路线)(协商缓存)
  • no-store 绝对禁止缓存,如果用了这个命令就是不会进行缓存,每次请求资源都要从服务器重新获取。(no-store 比较绝情,顾名思义就是不使用任何缓存策略。在 no-cache 的基础上,它连服务端的缓存确认也绕开了,只允许你直接向服务端发送请求、并下载完整的响应。)

Expires(强缓存)

Expires字段的作用是,设定一个强缓存时间。在此时间范围内,则从内存(或磁盘)中读取缓存返回。比如说将某一资源设置响应头为:Expires:new Date(“2022-7-30 23:59:59”);那么,该资源在2022-7-30 23:59:59 之前,都会去本地的磁盘(或内存)中读取,不会去服务器请求。但是,Expires已经被废弃了。对于强缓存来说,Expires已经不是实现强缓存的首选。

因为Expires判断强缓存是否过期的机制是:获取本地时间戳,并对先前拿到的资源文件中的Expires字段的时间做比较。来判断是否需要对服务器发起请求。这里有一个巨大的漏洞:“如果我本地时间不准咋办?”
是的,Expires过度依赖本地时间,如果本地与服务器时间不同步,就会出现资源无法被缓存或者资源永远被缓存的情况。所以,Expires字段几乎不被使用了。现在的项目中,我们并不推荐使用Expires,强缓存功能通常使用cache-control字段来代替Expires字段。

基于last-modified的协商缓存

基于last-modified的协商缓存实现方式是:

  • 首先需要在服务器端读出文件修改时间,
  • 将读出来的修改时间赋给响应头的last-modified字段。
  • 最后设置Cache-control:no-cache
    三步缺一不可。
    在这里插入图片描述
    注意圈出来的三行。
    第一行,读出修改时间。
    第二行,给该资源响应头的last-modified字段赋值修改时间
    第三行,给该资源响应头的Cache-Control字段值设置为:no-cache.(上文有介绍,Cache-control:no-cache的意思是跳过强缓存校验,直接进行协商缓存。)
    还没完。到这里还无法实现协商缓存
    当客户端读取到last-modified的时候,会在下次的请求标头中携带一个字段:If-Modified-Since。
    在这里插入图片描述

基础ETag的协商缓存

ETag就是将原先协商缓存的比较时间戳的形式修改成了比较文件指纹。

文件指纹:根据文件内容计算出的唯一哈希值。文件内容一旦改变则指纹改变。

我们来看一下流程↓

  1. 第一次请求某资源的时候,服务端读取文件并计算出文件指纹,将文件指纹放在响应头的etag字段中跟资源一起返回给客户端。
  2. 第二次请求某资源的时候,客户端自动从缓存中读取出上一次服务端返回的ETag也就是文件指纹。并赋给请求头的if-None-Match字段,让上一次的文件指纹跟随请求一起回到服务端。
  3. 服务端拿到请求头中的is-None-Match字段值(也就是上一次的文件指纹),并再次读取目标资源并生成文件指纹,两个指纹做对比。如果两个文件指纹完全吻合,说明文件没有被改变,则直接返回304状态码和一个空的响应体并return。如果两个文件指纹不吻合,则说明文件被更改,那么将新的文件指纹重新存储到响应头的ETag中并返回给客户端

在这里插入图片描述本文参考:
https://juejin.cn/post/7127194919235485733
https://www.jianshu.com/p/cb72dfb0f7b3

前端浏览器缓存机制 目录1 缓存定义及其优点2 强缓存2.1 expires 和 Cache-Control3 协商缓存4 浏览器缓存位置 1 缓存定义及其优点 什么是缓存? 当我们第一次访问网站的时候,电脑会把网站上的图片和数据下载到电脑上,当我们再次访问的时候,网站就会从电脑中直接加载出来,这就是缓存。比如我们访问网页点击后退功能的时候,加载的非常快,这就是缓存的优势。 缓存优点: 1 缓存服务器压力,不用每次都去请求某些数据了 2 提升性能,打开本地资源肯定会比请求服务器更快 3 减少带宽消耗,当我们使用缓存时,只会产 阅读详情

相关推荐

前端领域AJAX的请求缓存更新机制

本文旨在系统性地介绍AJAX请求在前端开发中的缓存管理机制,涵盖从HTTP协议层面的缓存控制到前端代码实现的全套解决方案。我们将重点讨论如何在前端应用中合理利用缓存提升性能,同时确保数据的及时更新。文章首先介绍AJAX缓存的基本概念,然后深入分析HTTP缓存机制,接着探讨前端实现策略,最后通过实际案例展示各种缓存更新技术的具体应用。AJAX:Asynchronous JavaScript and XML,一种无需重新加载整个网页就能更新部分内容的技术HTTP缓存。

AI架构全栈开发实战笔记 1198

前端缓存详解

前言 缓存机制无处不在,有客户端缓存,服务端缓存,代理服务器缓存等。 一、按缓存位置分类 按缓存位置分类,可以分为:Service Worker,Memory Cache,Disk Cache。 在 Chrome 浏览器开发者工具的Network的Size栏会出现的四种情况: from ServiceWorker from memory cache from disk cache ...

huangpb的博客 9879

解密前端领域Yarn的缓存机制

前端项目依赖少则几十个、多则上千个npm包,每次安装都重新下载会浪费大量时间和带宽。Yarn的缓存机制正是为解决这一问题而生:通过“预存”已下载的包,实现“一次下载,多次复用”。本文将聚焦Yarn 1.x(Classic)的缓存机制,覆盖存储原理、操作方法、实战技巧及常见问题。本文将从“生活故事”引出缓存概念,逐步讲解缓存的存储位置、工作流程、管理方法,最后通过实战演示和常见问题解答,帮你彻底掌握Yarn缓存的“前世今生”。Yarn缓存:全局存储的已下载包压缩文件+元数据,所有项目共享。哈希校验。

AI架构全栈开发实战笔记 1034

中高级前端工程师都需要熟悉的技能--前端缓存

web缓存主要指的是两部分:浏览器缓存和http缓存。其中http缓存是web缓存的核心,是最难懂的那一部分,也是最重要的那一部分。浏览器缓存:比如,localStorage,sessionStorage,cookie等等。这些功能主要用于缓存一些必要的数据,比如用户信息。比如需要携带到后端的参数。亦或者是一些列表数据等等。不过这里需要注意。像localStorage,sessionStorage这种用户缓存数据的功能,他只能保存5M左右的数据,多了不行。cookie则更少,大概只能有4kb的数据。...

web全栈开发的博客 1902

前端领域组件通信的缓存机制应用

本文旨在全面解析前端组件通信中的缓存机制,帮助开发者理解如何在不同通信方式中应用缓存策略,提升应用性能。内容涵盖从基础到高级的各种缓存实现方案。核心概念与联系:介绍组件通信和缓存的基本概念通信方式与缓存实现:详细分析各种通信方式的缓存策略实战案例:通过实际项目展示缓存应用性能对比与优化建议组件通信:前端应用中不同组件之间交换数据和交互的方式缓存机制:存储计算结果以避免重复计算的优化技术状态管理:集中管理应用状态的方法论核心概念回顾组件通信是前端应用的基础架构。

AI架构全栈开发实战笔记 1056

电压抬升电路设计

一、实验目的 掌握集成运放电压放大电路设计基本方法。 掌握基本仪器使用方法(电源、信号发生器、示波器)。 二、实验内容及结果 实验内容 基于集成运放设计一传感器信号采集电路。传感器输出信号在±50mV,频率为100Hz以内,模数转换器允许输入电压在0~5V,要求设计传感器与模数转换器之间的信号采集电路,实现传感器信号放大10倍,并适合模数转换器的输入。模数转换器的输入电阻为1KHz,设计电路时,可使用1KHz电阻作为信号采集电路负载,代替模数转换器。 实验具体要求如下: (1)确定电路形式,说明电压转

Safaearth的博客 4万+

前端常见的三种缓存方式

前端的缓存方式

xinxin_csdn的博客 5594

HC32F460的GPIO重映射实战:如何用3步搞定SPI引脚冲突问题

本文详细介绍了HC32F460的GPIO重映射功能,通过三步操作解决SPI引脚冲突问题。文章解析了HC32F460的FuncGroup功能分组机制,提供了具体的寄存器配置步骤和验证技巧,并对比了与传统方案的性能优势,帮助工程师灵活配置引脚,优化硬件设计。

t4y5u6i7o的博客 918

前端缓存详解以及相关性能优化策略

缓存机制随处可见,优秀的缓存机制可以缩短网页请求资源的事件,减少延迟,并且由于缓存文件可以重复利用还可以减少带宽,降低网络负荷,从而提高我们的性能优化。缓存就是数据交换的缓冲区(又称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,找到了则直接执行,找不到的话则从内存中查找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

weixin_47948509的博客 5488

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库:Harbor(使用自签名证书)(超简单搭建私有仓库Harbor-亲测无坑解决K8s私有仓库证书问题的关键在于正确配置容器运行时(本例中是containerd)信任私有仓库的证书。

lzz的博客 2140

SAP EWM 内向交货流程(一)

本文介绍了SAP EWM系统中内向交货单的基本配置与操作流程。

huqinghai的专栏 2398

一文彻底搞懂前端缓存机制

2)当强缓存没有命中的时候,浏览器一定会发送一个请求到服务器,通过服务器端依据资源的另外一些http header验证这个资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回,但是不会返回这个资源的数据,而是告诉客户端可以直接从缓存中加载这个资源,于是浏览器就又会从自己的缓存中去加载这个资源;当强缓存未命中时,浏览器就会发送请求到服务器,服务器会验证协商缓存是否命中,如果协商缓存命中,请求返回的http状态为304,并会显示说明Not Modified,浏览器收到该返回后,就会从缓存中加载了。

hellocoder2029的博客 1671

ESP32-S3模组上跑通esp32-camera(32)

ESP32-S3模组上跑通esp32-camera(32)

phmatthaus的专栏 771

前端优化性能——缓存机制

而内存缓存、磁盘缓存等是缓存的 “存储载体”,决定了资源在本地的存放位置。举例:关闭标签页后重新打开,或从其他页面跳转回来时,资源可能从磁盘缓存加载(内存已释放,需从磁盘读取)。若内存中存在该资源且未失效(如刚加载过),直接使用内存缓存,结束流程。举例:刷新当前页面时,很多资源会从内存缓存加载(因为资源仍在内存中)。),更新资源时改变哈希,使浏览器认为是新资源,自动跳过旧缓存。6.2、协商缓存(需请求服务器,由服务器决定是否复用缓存)6.4、缓存的存储位置(内存缓存 vs 磁盘缓存)

weixin_43482333的博客 1204

全新YOLO26有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

🔥《2026年YOLO26改进专栏》🔥 🚀持续更新500+最前沿创新改进点(顶会顶刊论文/独家创新策略),涵盖主干网络、各种卷积、注意力机制、检测头等模块,助力科研论文发表与模型性能提升,支持检测/分割/分类任务。订阅即获完整可运行项目,提供专业QQ答疑群,适合科研发论文(SCI/CCF/核心)及工业应用(PCB/医学/遥感检测)。专栏价格将逐步上涨,早订更优惠! ⭐特色:非计算机专业友好、模块可自由组合、全网独家创新;📌适用:研究生大论文和小论文创新、小目标检测、多领域科研应用,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 5134

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉

本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。

行知SLAM 180

前端数据缓存机制详解

是提升应用性能、减少网络请求、优化用户体验的关键技术手段。通过 HTTP 协议头控制缓存,适用于静态资源(如 JS、CSS、图片)和接口响应。适用于存储大量结构化数据(支持索引、事务),容量可达数百 MB。适用于单页应用(SPA)中短期数据缓存,随页面刷新失效。适用于存储结构化数据,容量约 5~10MB,分为。实现离线缓存和网络请求拦截,适合 PWA 应用。

weixin_48953950的博客 3139

Claude Code 分布式并行开发最佳实践:1中枢+10Worker跨多Git仓库全流程落地

本文介绍了一套基于Claude Code和Git Worktree的分布式并行开发方案,解决多仓库、微服务开发中的核心痛点。方案采用"1个决策中枢+10个并行Worker"架构,中枢负责任务拆解和调度,每个Worker绑定独立仓库实现完全隔离开发。关键优势包括:任务并行效率提升10倍、跨仓库依赖自动编排、版本统一管理、零第三方依赖。文章详细提供了环境准备、架构设计、中枢搭建和初始化脚本等全流程落地指南,特别适合多仓库协同的全栈开发场景。

AI天才研究院 244

前端几种本地缓存机制

在漫长的前端开发过程中,我们常用的几种本地缓存机制:Cookie,LocalStorge,SessionStorge  1.Cookie的特点 1)cookie的大小受限制,cookie大小被限制在4KB,不能接受像大文件或邮件那样的大数据。 2)只要有请求涉及cookie,cookie就要在服务器和浏览器之间来回传送(这解释为什么本地文件不能测试cook

huang100qi的专栏 2054

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何在前端应用中实现缓存机制?

前端应用中的缓存机制分为多层,包括浏览器 HTTP 缓存、Service Worker + Cache Storage、客户端本地存储、应用内存缓存和前端状态管理库缓存。每层缓存各司其职,协同工作以提升性能与用户体验。HTTP 缓存通过强缓存和协商缓存减轻服务器压力;Service Worker 支持离线访问和动态更新;本地存储(如 localStorage、IndexedDB)用于持久化数据;内存缓存和状态管理库(如 React Query)则提供高效的数据复用。合理配置缓存策略、版本管理、TTL 和失效

商务合作欢迎私信我 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

前端缓存/浏览器缓存机制

前端缓存/浏览器缓存机制 1. 缓存过程分析 浏览器第一次向服务器发起该请求后拿到请求结果后,将请求结果和缓存标识存入浏览器缓存,浏览器对于缓存的处理是根据第一次请求资源时返回的响应头来确定的。 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中 2.浏览器缓存方式 浏览器中的缓存作用分为两种情况,一种是需要发送HTTP请求,一种是不需要发送。 (1)强缓存 不会向服务器发送请求,直接从缓存中读取资源。 通过

HZ___ZH的博客 1257

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

前端Web缓存机制详解

Web缓存是介于Web服务器与客户端(如浏览器)之间的资源副本存储机制,用于保存HTML页面、图片、JavaScript文件等资源的副本。当用户发起相同资源的请求时,系统会根据缓存策略决定直接返回本地副本(命中缓存)或向服务器重新请求(缓存失效其核心目标是减少重复数据传输,优化资源加载效率。缓存层级与流程​ 浏览器发起请求时,按优先级检查缓存:​Service Worker → 内存缓存 → 磁盘缓存 → 服务器​ 若某一层缓存命中且未过期,则直接返回资源。

2301_77662165的博客 629

Web前端的缓存机制(那些以代价换来的效率)

对于Web前端而言,cache可以说是无处不在,通常是2个环节之间,就会引入一个cache做为提升整体效率的角色。例如A和B两者之间的数据交换,为了提升整体的效率,引入角色C,而C被用于当做热点数据的存储,或者是某种中间处理的机制。 也就是我们常常说的“空间换时间”,牺牲一部分代价,来换取整体效率的提升。 那么我们一起来看看前端当中,有那些比较关键的缓存?它们又是怎样协调工作的

牧之的天空 5456

使用缓存实现前端性能优化——浏览器缓存机制、缓存分类

前端性能优化探讨及浏览器缓存机制 一、缓存如何实现前端性能优化 1、什么是浏览器缓存 2、js请求,一般会有哪些地方有缓存处理? 3、什么是静态资源 二、缓存的类型 1、客户端缓存 ① 浏览器的http缓存 1)缓存过程分析 2)分类 强缓存 协商缓存 缓存的实际中的应用策略 ② 本地存储cookie,localStorage,sessionStorage (客户端保存数据) 实现数据持久化(数据本地化) cookie还可以用于跟踪用户身份 2、 CDN 缓

秀秀的奇妙旅行 1293
上一篇: tsconfig.json配置详解
下一篇: H5设备兼容处理方法
菊の物语
博客等级 码龄10年 322粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值