浏览器缓存机制

浏览器缓存有先后顺序,总体分为以下四个方面:
Memory Cache
Service Worker Cache
Disk Cache
Push Cache

缓存位置

1. Memory Cache

内存中的缓存
优点:
浏览器会优先去命中的一种缓存
响应速度最快
缺点:
缓存时间短,关闭tab页面缓存将失效,与浏览器渲染进程紧密联系

2. Service Worker Cache

独立于主线程之外的javascript线程。脱离于浏览器窗体,因此无法直接访问DOM元素。因此这是一个独立的线程,能在不干扰主线程的情况下提升性能。
缓存三个步骤:
注册Service Worker
监听install事件,即可缓存需要的文件
用户下次访问可通过拦截请求的方式获取缓存数据,若没有就会重新获取数据,然后再进行缓存。
可以实现:离线缓存、消息推送、以及网络代理等功能。

Disk Cache

硬盘缓存
缓存位置在电脑硬盘上,
优点:
什么文件都可以缓存;
覆盖面最广,可以根据HTTP Header中的字段判断哪一些资源需要缓存,那些可以不请求直接用,哪些已过期需要重新请求。
缺点:
读取速度慢

Push Cache

推送缓存,国内使用较少。

缓存策略

分为两种:强缓存和协商缓存
一次HTTP请求流程:浏览器第一次发起请求,实现询问浏览器有没有缓存,没有就向服务器进行请求,然后结果进行缓存。
示意如下图:
在这里插入图片描述

强缓存

利用HTTP头部的Expires和Cache-Control两个字段来控制。
当请求再次发出,浏览器会根据expires和cache-control判断目标资源是否“命中”强缓存,命中就直接从缓存中获取资源,没有则再和服务端通信。
expires是时间戳,二次请求想服务器请求资源时,刘娜力气会先对比本地时间和expires的时间戳,若本地时间小于expires设定的过期时间,就直接去缓存中取这个资源。但expires得本地时间可以手动改,因此不太可靠。所以Cache-Control这个方法。
Cache-Control是个时间长度,以下几个字段较常见

  1. 通过max-age控制资源的有效期,,s-maxage是代理服务器的缓存时间。客户端中以max-age为准。
  2. 针对资源能否被代理服务缓存而存在:public和private
    如果为资源设置了public,那么既可以被浏览器缓存,也可以被代理服务器缓存;若设置了private,那么只能被浏览器缓存。默认private
  3. no-store 不适用任何缓存策略,只允许直接向服务端发送请求,并下载完整的响应;
    no-cache 绕开了浏览器,每一次发起请求都不会再去询问浏览器的缓存情况,而是直接向服务端确认该资源是否过期(协商缓存)

协商缓存

依赖于服务端与浏览器之间的通信。
协商缓存机制下,浏览器要向服务器询问缓存的相关信息,判断是重新发起请求下载完整的响应,还是从本地获取缓存的资源。若服务端提示缓存资源未改动(Not Modified),资源会被重定向到浏览器缓存,对应状态码为304,过程如下图:
在这里插入图片描述
有两个字段:Last-Modified 和Etag

Last-Modified

是个时间戳。
若启用了协商缓存,会在首次请求时随着Response Headers返回,随后每次请求时,会带上一个叫If-Last-Modified的时间戳字段,值是上次返回的last-modified的值。服务器接收到这个时间戳后,,对比该时间戳和资源在服务器上的最后一次修改时间是否一致,从而判断资源是否发生了变化。若发生变化,则返回一个完整的相应内容,总更新Response Headers中的Last-Modified值;否则,返回上图的304
缺点:
(重复请求)手动改服务器内容,即使没修改内容,服务器也会认为是新内容,引发一次完整的响应;
(不请求)修改文件速度过快,,因为If-Modified-Since只能检查到以秒为单位的时间差,若感知不到,就不会请求。
----因此Etag解决了这个问题----

Etag

Etag是由服务器每个资源生成的唯一标识字符串,它基于文件内容编码,只要文件内容不同,对应的Etag就不同。
和Last-Modified类似,首次请求时会在响应头获取最初的标识字符串,下一次请求时,请求头会带上值相同,名为If-None-Match的字符串供服务端对比。
缺点:需要服务器额外付出开销,影响服务器的性能。

参考:全面总结浏览器缓存机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/399582.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABAP 导入Excel表示例程序

目录 ABAP 导入excel示例程序创建程序使用的结构上传下载模板 ABAP 导入excel示例程序 批量导入程序,需要使用到导入模板,首先需要创建程序,之后是需要创建excel导入模板,并且需要将excel导入模板上传到SAP系统里面,之…

Code-Audit(代码审计)习题记录

介绍: 自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit 1、习题一 题目内容如下: 1…

运行jar时提示缺少依赖的类

供应商丢过来一个jar,是用Java写的Windows桌面程序,运行jar时提示缺少依赖的类,一看就是打包没带依赖的库,下面是解决方法: 1、解压缩jar,查看 META-INF 目录下的 MANIFEST.MF,看看都引用了哪些…

FlinkCDC详解

1、FlinkCDC是什么 1.1 CDC是什么 CDC是Chanage Data Capture(数据变更捕获)的简称。其核心原理就是监测并捕获数据库的变动(例如增删改),将这些变更按照发生顺序捕获,将捕获到的数据,写入数据…

Cesium for Unreal 从源码编译到应用——插件编译

一、安装环境 Unreal Engine 5.3 CMake 3.17.5 Microsoft Visual Studio 2019 二、源码准备 下载cesium-unreal-samples工程。 git clone https://github.com/CesiumGS/cesium-unreal-samples.git 然后在工程目录创建Plugins文件夹,并下载cesium-unreal工程。 …

演练纪实│同创永益助力中交财务公司成功开展灾备应急演练

12月26日同创永益协助中交财务公司顺利完成核心业务系统、高性能云平台等关键业务系统的子系统验证演练,以及模拟切换演练、同城灾备应急演练。 同创永益北方交付二组的同事在演练前与中交财务公司演练负责人紧密沟通,展现了出色的专业素养和团队协作能力…

Vue3学习——标签的ref属性

在HTML标签上&#xff0c;可以使用相同的ref名称&#xff0c;得到DOM元素ref放在组件上时&#xff0c;拿到的是组件实例&#xff08;组件defineExpose暴露谁&#xff0c;ref才可以看到谁&#xff09; <script setup lang"ts"> import RefPractice from /compo…

测试C#调用Emgucv读取并显示视频文件

微信公众号“CSharp编程大全”的文章《C# 视频播放》介绍了基于emgucv读取视频文件并播放的用法&#xff08;百度文章名没有找到对象的文章地址&#xff0c;有兴趣的可以在微信中搜索该公众号并查看文章具体内容&#xff09;&#xff0c;本文学习并测试Emgucv播放视频文件的基本…

拼多多关键字搜索API-通过关键字获取拼多多商品列表商品价格商品id商品链接

拼多多根据关键词取商品列表 API 返回值说明 item_search-根据关键词取商品列表 公共参数 请求地址: pinduoduo/item_search 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&…

Mysql系列之命令行登录、连接工具登录、数据库表常用命令

登录与常用命令 连接工具登录命令行登录数据库1、查看数据库2、指定数据库3、查看当前数据库4、建库语句 数据表1、查看数据表2、查看表结构信息3、查看建表语句4、建表语句 连接工具登录 首先下载mysql连接工具&#xff0c;解压后直接打开软件&#xff0c;按以下步骤操作&…

☀️将大华摄像头画面接入Unity 【2】配置Unity接监控画面

一、前言 上一篇咱们将大华摄像头接入到电脑上了&#xff0c;接下来准备接入到unity画面。 接入到监控就涉及到各种视频流的格式rtsp、rtmp、m3u8。 Unity里有一些播放视频流的插件&#xff0c;主要的就是AVPro Video 和 UMP等&#xff0c;这次我用的是UMP 最好使用2.0.3版本…

顺序表详解(SeqList)

本文使用C语言进行顺序表的代码实现。 博主将使用代码和相关知识相结合的方式进行讲解&#xff0c;简单易懂&#xff0c;懵懂的大学生一听就会~ 顺序表是一种线性表的存储结构&#xff0c;它将数据元素存储在一段连续的存储空间中&#xff0c;每个元素占据一个存储单元&#x…

VSCODE中使用Django处理后端data和data models

链接&#xff1a; Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model&#xff08;模型&#xff09;负责封装应用程序的数据和业务逻辑部分。Model包含数据结构&#xff0c;数据处理逻辑以及相关的操作方法&#…

Camunda和SpringBoot的兼容版本

官网 https://docs.camunda.org/manual/7.15/user-guide/spring-boot-integration/version-compatibility/ Camunda和SpringBoot的兼容版本

安达发|APS生产排程的多机台产线详解

在生产管理中&#xff0c;APS&#xff08;高级计划与排程&#xff09;系统它可以帮助企业实现生产过程的优化和效率提升。特别是在多机台产线的生产环境中&#xff0c;APS系统的作用更加明显。本文将详细解析APS生产排程的多机台产线&#xff0c;包括允许使用的最大设备数&…

ai数字仿真辩论主持人提升用户体验

Ai虚拟主持人是元宇宙和AI人工智能技术在播音主持行业的重要应用&#xff0c;AI虚拟主持人能极大提升新闻资讯内容的精准度&#xff0c;改变单一的播报形式。 首先&#xff0c;AI虚拟主持人极大地提升了节目的制作效率和灵活性。传统主持人需要花费大量时间进行彩排和录制&…

【JGit】分支管理实践

本文紧接【JGit】简述及学习资料整理。 以下梳理了使用 JGit 进行 Git 操作的实践 JGit实践 主函数 public static void main(String[] args) throws Exception {String localDir "D:\\tmp\\git-test\\";String gitUrl "http://192.168.181.1:3000/root/g…

PFA容量瓶在半导体晶圆化学机械抛光中的用处是什么?

PFA容量瓶又称可溶性聚四氟乙烯容量瓶、特氟龙容量瓶容量瓶&#xff0c;有螺纹和插口两种可供选择&#xff0c;常用有10ml、25ml、50ml、100ml、250ml、500ml、1000ml规格 Teflon系列PFA容量瓶是一个透明的长颈瓶&#xff0c;瓶体为梨形&#xff0c;便于摇荡液体和刷洗。每一个…

Linux进程(一)信号-----信号产生

前言 在 Linux 中&#xff0c;进程具有独立性&#xff0c;进程在运行后可能 “放飞自我”&#xff0c;这是不利于管理的&#xff0c;于是需要一种约定俗成的方式来控制进程的运行&#xff0c;这就是 进程信号&#xff0c;本文将会从什么是进程信号开篇&#xff0c;讲述各种进程…

harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed

一. 安装配置 DevEco Studio 安装包时报错 execute ohpm install failed. Install task failed: ArkTS 3.2.12.5. Install ArkTS dependencies failed. 解决办法 找原因&#xff0c;首先&#xff0c;我的电脑中之前安装过node&#xff0c;也许是因为这个。&#xff08;其实…