弱缓存变强缓存的原因

Open UI5 源代码解析之935:TablePersoController.js 本文分析了SAP OpenUI5项目中TablePersoController.js文件的功能定位和设计特点。该文件实现了一个表格个性化编排控制器,负责协调表格、个性化对话框和持久化服务之间的交互。文件定位为状态治理工具,而非可视化控件,继承自ManagedObject而非Control。 分析显示该控制器具有多重作用: 作为sap.m.Table早期个性化方案的核心 管理TablePersoDialog的创建和调用 消费persoService进行数据持久化 在表格列对象与持久化配置间转换 协调多表共享配 阅读详情

先介绍下强缓存和弱缓存

在工作中,前端代码打包之后的生成的静态资源就要发布到静态服务器上,这时候就要做对这些静态资源做一些运维配置,其中,gzip和设置缓存是必不可少的。这两项是最直接影响到网站性能和用户体验的。

缓存的优点:

  • 减少了不必要的数据传输,节省带宽
  • 减少服务器的负担,提升网站性能
  • 加快了客户端加载网页的速度
  • 用户体验友好

缺点:

  • 资源如果有更改但是客户端不及时更新会造成用户获取信息滞后,如果老版本有bug的话,情况会更加糟糕。

强缓存

强是强制的意思。当浏览器去请求某个文件的时候,服务端就在respone header里面对该文件做了缓存配置。缓存的时间、缓存类型都由服务端控制,具体表现为:
respone header 的 cache-control,常见的设置是max-age public private no-cache no-store等。

如下:

cache-control:max-age=31536000,public,immutable
Expires:0 // http1.0的

Expires: 是http1.0的规范,同时存在时,优先级最低。

 

 max-age表示缓存的时间是31536000秒(1年),public表示可以被浏览器和代理服务器缓存,代理服务器一般可用nginx来做。immutable表示该资源永远不变,但是实际上该资源并不是永远不变,它这么设置的意思是为了让用户在刷新页面的时候不要去请求服务器!啥意思?就是说,如果你只设置了cahe-control:max-age=31536000,public 这属于强缓存,每次用户正常打开这个页面,浏览器会判断缓存是否过期,没有过期就从缓存中读取数据;但是有一些 "聪明" 的用户会点击浏览器左上角的刷新按钮去刷新页面,这时候就算资源没有过期(1年没这么快过),浏览器也会直接去请求服务器,这就是额外的请求消耗了,这时候就相当于是走协商缓存的流程了。如果cahe-control:max-age=315360000,public再加个immutable的话,就算用户刷新页面,浏览器也不会发起请求去服务,浏览器会直接从本地磁盘或者内存中读取缓存并返回200状态,看上图(from memory cache)。这是2015年facebook团队向制定 HTTP 标准的 IETF 工作组提到的建议:他们希望 HTTP 协议能给 Cache-Control 响应头增加一个属性字段表明该资源永不过期,浏览器就没必要再为这些资源发送条件请求了。

属性值和含义

  • cache-control: max-age=xxxx,public
    客户端和代理服务器都可以缓存该资源;
    客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,如果用户做了刷新操作,就向服务器发起http请求

  • cache-control: max-age=xxxx,private
    只让客户端可以缓存该资源;代理服务器不缓存
    客户端在xxx秒内直接读取缓存,statu code:200

  • cache-control: max-age=xxxx,immutable
    客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,即使用户做了刷新操作,也不向服务器发起http请求

  • cache-control: no-cache
    跳过设置强缓存,但是不妨碍设置协商缓存;一般如果你做了强缓存,只有在强缓存失效了才走协商缓存的,设置了no-cache就不会走强缓存了,每次请求都回询问服务端。

  • cache-control: no-store
    不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了。

总结:

强缓存就是为了给客户端自给自足用的,在客户端控制。如果资源没过期,就取缓存,如果过期了,则请求服务器。

协商缓存

当某天,客户端请求该资源时发现其过期了,这是就会去请求服务器了,而这时候去请求服务器的这过程就可以设置协商缓存。这时候,协商缓存就是需要客户端和服务器两端进行交互的。

设置协商缓存:

etag: '5c20abbd-e2e8'
last-modified: Mon, 24 Dec 2018 09:49:49 GMT

etag:每个文件有一个,改动文件了就变了,就是个文件hash,每个文件唯一,就像用webpack打包的时候,每个资源都会有这个东西,如: app.js打包后变为 app.c20abbde.js,加个唯一hash,也是为了解决缓存问题。

last-modified:文件的修改时间,精确到秒

每次http返回来 response header 中的 ETag和 Last-Modified,在下次请求时在 request header 就把这两个带上(但是名字变了ETag-->If-None-Match,Last-Modified-->If-Modified-Since ),服务端把你带过来的标识,资源目前的标识,进行对比,然后判断资源是否更改了。

为什么要有etag

你可能会觉得使用last-modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要etag呢?HTTP1.1中etag的出现(也就是说,etag是新增的)主要是为了解决几个last-modified比较难解决的问题:

  • 一些文件也许会周期性的更改,但是他的内容并不改变(仅仅改变的修改时间),这个时候我们并不希望客户端认为这个文件被修改了,而重新get;

  • 某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),if-modified-since能检查到的粒度是秒级的,这种修改无法判断(或者说UNIX记录MTIME只能精确到秒);

  • 某些服务器不能精确的得到文件的最后修改时间。

总结:

如果资源有更改,返回200,返回最新的资源,如果资源没更改,返回304,浏览器读取本地缓存。协商缓存无论如果,都要向服务端发请求的,只不过,资源未更改时,返回的只是header信息,所以size很小;而资源有更改时,还要返回body数据,所以size会大。

用户行为对缓存的影响

  • F5 会跳过强缓存规则,直接走协商缓存
  • Ctrl+F5 跳过所有缓存规则,和第一次请求一样,重新获取资源

配置资源的缓存规则

可以由后端服务器配置,也可以在nginx中配置。

后端服务器如nodejs:

res.setHeader('max-age': '3600 public')
res.setHeader(etag: '5c20abbd-e2e8')
res.setHeader('last-modified': Mon, 24 Dec 2018 09:49:49 GMT)

nginx配置

实际使用

像目前用vue-cli打包后生成的单页文件是有一个html,与及一堆js css img资源。

index.html文件采用协商缓存,理由就是要用户每次请求index.html不拿浏览器缓存,直接请求服务器,这样就保证资源更新了,用户能马上访问到新资源,如果服务端返回304,这时候再拿浏览器的缓存的index.html,切记不要设置强缓存!!!

实际遇到的问题

看到的很多请求的状态是304,而cach-control中max-age是一年,date也没有在一年前,应该是命中强缓存呀,怎么还是走了协商缓存了呢

网上的在你访问过程中,可能会经过很多层cdn和中间服务器,而且date在这么多层中也有可能是不准的,我们公司Linux系统时间好像都不对

仅仅设置了弱缓存Etag和ast-Modified,为啥生效了强缓存,导返了200 0K (from disk cache)或 200 0K (from memory cache)

有弱缓存时,"Cache-Control”的默认值”private”会自动生效,但其有效期机制存在不确定性。更议手动设置为”no-cache”

从 on-premise 到 abapGit 仓库, 把可迁移的 ABAP 内容先整理干净 摘要:abapGit在SAP系统间代码迁移中的关键作用 abapGit不仅是代码推送工具,更是SAP系统间代码迁移的重要桥梁。它通过序列化开发对象到Git仓库,实现on-premise到云环境的代码转移,尤其适用于系统迁移和资产导出场景。该工具需区分社区版与SAP官方支持版本,并需满足SAP BASIS 702+等前置条件。实际操作中,建议为每个仓库创建新包,并通过ADT进行开发。关键点在于仅传输ABAP environment支持的已发布对象类型,且仓库目录结构直接影响迁移效率。从克隆到提交的完整流程需注 阅读详情

相关推荐

非模式物种PySCENIC分析流程

外的物种想要做scenic分析的话, 可以使用同源基因转换后再进行分析, 将要分析的物种的gene Symbol转换为人、小鼠或者是果蝇的gene Symbol后进行分析。odiscus sinensis(中华鳖)的基因-细胞的矩阵,进行pyscenic分析的话,可参考以下示例。目前pyscenic分析支持的物种仅为人、小鼠和果蝇,其他物种暂时还没有相应的数据库,因。本教程基于Linux及服务。SCENIC转录因子分析。器中的Rstudio环境。例如我们有一个Pel。

weixin_47195452的博客 933

HTTP 缓存机制一二三

(点击上方蓝字,快速关注我们) 作者:阿咩 https://zhuanlan.zhihu.com/p/29750583 如有好文章投稿,请点击 → 这里了解详情 Web 缓存大致可以分为:数据库缓存、服务器端缓存(代理服务器缓存、CDN 缓存)、浏览器缓存。 浏览器缓存也包含很多内容: HTTP 缓存、indexDB、cookie、lo

前端大全 659

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1607

强缓存和协商缓存详解

强缓存 到底什么是强缓存?强在哪?其实强是强制的意思。当浏览器去请求某个文件的时候,服务端就在respone header里面对该文件做了缓存配置。缓存的时间、缓存类型都由服务端控制,具体表现为: respone header 的cache-control,常见的设置是max-age public private no-cache no-store等 如下图, 设置了cahe-control:max-age=31536000,public,immutable max-age表示缓存的时间是31536000

goutinga的博客 5043

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 221

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 368

彻底吃透浏览器的缓存机制!

作者 | 浪里行舟 责编 | 胡巍巍 前言 缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。 对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请...

优快云资讯 2万+

室内温度控制仿真(Simulink+PLC)

本篇博客将会带领大家解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法

RXXW_Dor的博客 3458

前端性能优化学习 05 请求和响应优化 02(HTTP 缓存[强缓存、协商缓存、缓存策略等]、CDN 缓存)

HTTP 缓存 在任何一个前端项目中,访问服务器获取数据都是很常见的事情,但是如果相同的数据被重复请求了不止一次,那么多余的请求次数必然会浪费网络带宽,以及延迟浏览器渲染所要处理的内容,从而影响用户的使用体验。如果用户使用的是按量计费的方式访问网络,那么多余的请求还会隐性地增加用户的网络流量资费。因此考虑使用缓存技术对已获取的资源进行重用,是一种提升网站性能与用户体验的有效策略。 缓存的原理是在首次请求后保存一份请求资源的响应副本,当用户再次发起相同请求后,如果判断缓存命中则拦截请求,将之前存储的响应副本返

皮蛋很白的博客 1644

超级全的PCB LAYOUT高速信号走线指南——简化应用版

在PCB Layout中,几乎涵盖了所有的高速信号走线指南。包括了TF/SD、HDMI、LVDS、DVP、eDP、MIPI、USB2.0、USB3.0、MAC、BT.1120、PCIE高速信号等等。此版本为简化版。

bhxc809751502的博客 8547

基于多智能体强化学习的轨道追逃博弈方法复现

本文提出了一种基于多智能体深度强化学习(MADDPG)的空间轨道追逃博弈方法。通过构建Actor-Critic网络架构,采用集中训练分布式执行的策略,使卫星群能够自主协调完成对非合作目标的围捕任务。代码实现了经验回放缓冲区、噪声探索机制和网络参数更新等核心功能,通过奖励函数设计平衡最短时间、燃料消耗和碰撞规避等目标。仿真结果表明该方法能有效利用数量优势,涌现出智能协同行为,为解决复杂空间博弈问题提供了新思路。

huanghm88的专栏 336

浏览器缓存机制介绍与缓存策略剖析

浏览器缓存机制介绍与缓存策略剖析 缓存可以减少网络 IO 消耗,提高访问速度。浏览器缓存是一种操作简单、效果显著的前端性能优化手段。对于这个操作的必要性,Chrome 官方给出的解释似乎更有说服力一些: 通过网络获取内容既速度缓慢又开销巨大。较大的响应需要在客户端与服务器之间进行多次往返通信,这会延迟浏览器获得和处理内容的时间,还会增加访问者的流量费用。因此,缓存并重复利用之前获取的资源的能力成...

最恨不过不努力 6239

【CASS精品教程】013:CASS9.1生成标准图幅案例教程

在CASS中,可以很方便的生成标准图幅,如50*50。本文演示cass中,根据测区范围标准图幅生成过程。

智慧空间实验室 1万+

[笔记] 浏览器缓存

这篇文章的笔记:https://zhuanlan.zhihu.com/p/28113197 浏览器缓存 1. 无需验证 针对缓存脚本始终不变,设置文件返回的http头中的cache-control为: Cache-control: max-age=31536000 因为标准中规定max-age最大不能超过一年,所以设为最大值31536000(以秒为单位); 如果脚本内容必须更改,就改变...

Dorothy_AaAa的博客 636

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HTTP 缓存新鲜度 Cache-Control:max-age

当客户端发起一个请求时,缓存检索到已有一个对应的陈旧资源(缓存副本),则缓存会先将此请求附加一个If-None-Match头,然后发给目标服务器,以此来检查该资源副本是否是依然还是算新鲜的,若服务器返回了 304 (Not Modified)(该响应不会有带有实体信息),则表示此资源副本是新鲜的,这样一来,可以节省一些带宽。有些内容是不怎么相对变化的,比如图片,比如js css这些,但是服务器配置这些有问题,没有考虑到带宽的优化,体验性的提升,所以没有配置描述缓存过期时间的内容。这两个时间相减*10%。

小楼一夜听春雨,深巷明朝卖杏花 4255

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Cache-Control头设置max-age和immutable属性

指定资源在缓存中的最大存储时间(秒)。在此期间内,浏览器直接从缓存加载资源,不发送请求到服务器。: 禁止中间代理(如CDN、运营商)对资源进行修改,例如压缩图片、转码视频等。浏览器即使刷新页面也不会重新验证,直接使用缓存。: 静态且内容永不变化的资源(如文件哈希命名的资源)。: 需保持原始格式的资源(如严格校验的文件)。缓存7天,期间不重新验证,且禁止代理修改资源。: 声明资源在有效期内(如。(缓存1年且不可变)。

859

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

(转载)彻底理解浏览器的缓存机制

彻底理解浏览器的缓存机制 2018/04/16 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: HTTP请求(Request)报文,报文格式为:请求行 – HTTP头(通用信息头,请求头,实体头) – 请求报文主体(只有POST才有报文主体),...

weixin_30900589的博客 359

强缓存、协商缓存

文章目录概要一、强缓存强缓存总结二、协商缓存怎么设置强缓存与协商缓存 概要 在工作中,前端代码打包之后的生成的静态资源就要发布到静态服务器上,这时候就要做对这些静态资源做一些运维配置,其中,gzip和设置缓存是必不可少的。这两项是最直接影响到网站性能和用户体验的。 缓存的优点: 减少了不必要的数据传输,节省带宽 减少服务器的负担,提升网站性能 加快了客户端加载网页的速度 用户体验友好 缺点: 资源如果有更改但是客户端不及时更新会造成用户获取信息滞后,如果老版本有bug的话,情况会更加糟糕。 一、强缓

codewhy的博客 950

Nginx下关于缓存控制字段cache-control的配置说明

HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。

eshine Lau 的博客 3987

什么是强制缓存和协商缓存?

但是有一些 "聪明" 的用户会点击浏览器左上角的刷新按钮去刷新页面,这时候就算资源没有过期(1年没这么快过),浏览器也会直接去请求服务器,这就是额外的请求消耗了,这时候就相当于是走协商缓存的流程了(下面会讲到)。发请求-->看资源是否过期-->过期-->请求服务器-->服务器对比资源是否真的过期-->过期-->返回200状态码-->客户端如第一次接收该资源一样,记下它的cache-control中的max-age、etag、last-modified等。:在有效时间内,在缓存中找文件,不向服务器发送请求。

zhixuejia的博客 320

Nginx基础学习及配置理解

Nginx (engine x) 是一个高性能的开源反向代理服务器,也可以用作 HTTP 服务器、负载均衡器、邮件代理服务器等。它是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx的特点是占有内存少,并发能力强。由于nginx的并发能力在同类型的网页服务器中表现较好,国内有很多大公司都使用Nginx,比如百度、腾讯、淘宝等。Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达5万 个并发连接数的响应。

明静致远 577

[译] 写给大家看的 Cache-Control 指令配置

原文地址:Cache-Control for Civilians 原文作者:Harry 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:sunui 校对者:portandbridge、yzw7489757 最好的网络请求就是无须与服务器通信的请求:在网站速度为王的比试里,避免网络完胜于使用网络。为此,使用一个可靠的缓存策略会给你的访客带来完全不同...

weixin_34152820的博客 2434

HTTP:缓存控制

强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间。缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说,Expires=max-age + 请求时间,需要和Last-modified结合使用。但在上面我们提到过,cache-control的优先级更高。Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

2401_83816970的博客 1429

浅聊HTTP缓存 (HTTP Cache)

1.引子 HTTP缓存一直是一个老生常谈的问题,前端在日常发布、部署工作中,常常要面对。 其中面对的问题有可能会是:部署的代码无法生效 这次本人所在团队也遇到了相关问题,这里简述一下: 项目会在静态资源(如:css,js)使用chunkHash来处理,因此能保证修改后与旧代码文件名字不会重复。以避免无法更新改动。 在该项目中部署后,进行代码进行一次location.reload,改动即可...

weixin_33841503的博客 1050

【看完就透】前端缓存、HTTP缓存超详细讲解

在任何一个前端项目中,访问服务器获取数都是很常见的事情,但是如果相同的数据被重复请求了不止一次,那么多余的请求次数必然会浪费网络带宽,以及延迟浏览器渲染所要处理的内容,从而影响用户的使用体验。如果用户使用的是按量计费的方式访问网络,那么多余的请求还会隐形的增加用户的网络流量资费。因此考虑使用缓存技术对已获取的资源进行重用,是一种提升网站性能与用户体验的有效策略。

热爱思考、活力满满、开朗爱笑的年轻人 2040

关于缓存控制字段cache-control的配置说明

HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、ma.

JackieDYH的博客 5424
上一篇: 浏览器进程、线程、线程池解释及使用
下一篇: Babel原理
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值