前端浏览器缓存的好处和弊端以及如何处理弊端

这篇具有很好参考价值的文章主要介绍了前端浏览器缓存的好处和弊端以及如何处理弊端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

浏览器缓存

好处:

  1. 减少冗余的数据传输,节省带宽。
  2. 减轻服务器的请求压力,因为有缓存可以减少向服务器发送请求,
  3. 资源从缓存中读取,加快客户端的访问速度。因为无需从服务器请求等待响应

缺点:

  1. 系统更新时,如何删除浏览器的缓存资源,加载最新的页面。

缓存

  1. Service Worker:是一种独立于主线程之外的 Javascript 线程。它脱离于浏览器窗体,可以帮我们实现离线缓存、消息推送和网络代理等功能。

  2. Memory Cache:存在内存中的缓存。包括当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。因为存储在内存中,MemoryCache 是响应速度最快的一种缓存,但由于同样的原因,缓存持续性很短,会随着进程的释放而释放,一旦我们关闭 Tab 页面,内存中的缓存也就被释放了。

  3. Disk Cache:Disk Cache 也就是存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比之 Memory Cache 胜在容量和存储时效性上。会根据 HTTP Herder 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。

  4. Push Cache:Push Cache 是 HTTP2 在 server push 阶段存在的缓存,当以上三种缓存都没有命中时,它才会被使用,Push Cache 是一种存在于会话阶段的缓存,当 session 终止时,缓存也随之释放。不同的页面只要共享了同一个 HTTP2 连接,那么它们就可以共享同一个 Push Cache。

强缓存

不会向服务器发送请求,直接从缓存中读取资源。状态码 200,显示 from disk cache 或 from memory cache。设置两种 Http Header 实现:Expires 和 Cache-Control

  • Expires:值是一个时间戳,表示本地时间到这个设置的时间缓存就失效。
    • 缺点:受限于本地时间
    • 推荐使用 Cache-Control
  • Cache-Control:优先级比 Expires 高,可以在请求头或者响应头中设置
    1. private:默认:只能在浏览器中缓存,只有在第一次请求中访问服务器。如有 max-age:缓存期间不访问服务器
    2. public:可以被任何缓存区缓存,如浏览器、服务器、代理服务器
    3. no-cache: 可以缓存,相当于协商缓存,每次都需要去服务器验证缓存是否一致。如有 max-age:缓存期间不访问服务器
    4. no-store:不仅不能缓存,连暂存也不可以
    5. max-age:以秒为单位的缓存时间,设置时间内,均使用本地的缓存,不再向服务器发起请求
    6. s-magage=:跟 max-age 作用一样,只在代理服务器中生效。优先级高于 max-age,只对 public 缓存有效,
    7. must-revalidate:可缓存但必须再想源服务器进行确认
    8. proxy-revalidate:要求中间缓存服务器对缓存的响应有效性进行确认

协商缓存

当 cache-control 和 Expires 过期或者它的属性设置为 no-cache 时,那么浏览器第二次请求时就会与服务器进行协商,判断资源是否更改,

  • 没更改返回 304 Not Modified,使用本地缓存资源。

  • 资源更改,返回 200,重新加载,本次缓存资源更新。

    浏览器与服务器的交互依靠 Last-Modified/If-Modified-Since、ETag/If-None-Match 的 header 头属性,在请求头和响应头成对出现的。

  1. Last-Modified/If-Modified-Since:

浏览器在第一次访问资源,或缓存过期后访问,服务器返回资源的同时,在 response header 中添加 Last-Modified 的 header,值是这个资源在服务器上的最后修改时间,浏览器接收缓存文件和 header 信息。随后我们每次请求时,浏览器会自动带上一个叫 If-Modified-Since 的时间戳字段给服务器,它的值正是上一次 response 返回给它的 Last-modified 值,然后服务器会根据 If-Modified-Since 的值对比资源的最后修改时间判断资源是否进行了修改更新。

  1. ETag/If-None-Match :

Etag 是由服务器为每个资源生成的唯一的标识字符串,这个标识字符串是基于文件内容编码的,只要文件内容不同,它们对应的 Etag 就是不同的,因此 Etag 能够精准地感知文件的变化。Etag 和 Last-Modified 类似,当首次请求时,我们会在响应头里获取到一个最初的标识符字符串。那么下一次请求时,浏览器就会在请求头里就会带上一个值相同的、名为 if-None-Match 的字符串供服务器比对。Etag 的优先级会比 Last-Modified 高,但是 Etag 因为要生成,也会更消耗服务器性能。

Cache-Control: no-cache 和 Cache-Control: no-store 区别

看字面意思容易误解,no-cache 就是不缓存,但是 no-cache 并不是不缓存,而是使用协商缓存,所以并不能禁止缓存,no-store 才是真正的禁止缓存。从节省带宽角度讲,使用 no-cache 更优一点,文件未发生改变时只传输很小的报文大小,只有在文件改变时才会传输整个文件大小。而不是 no-store 不管什么情况都传输整个文件大小。

Pragma: no-cache:和 Cache-Control: no-cache 区别

Pragma: no-cache 跟 Cache-Control: no-cache 相同,Pragma: no-cache 兼容 http 1.0 ,Cache-Control: no-cache 是 http 1.1 提供的。因此,Pragma: no-cache 可以应用到 http 1.0 和 http 1.1,而 Cache-Control: no-cache 只能应用于 http 1.1.

如何保证系统实时更新

方法一:
以 vue 为例,vue 在打包的时候,css 和 js 名字都加了哈希值,所以改动后打包生成的 js 和 css 是唯一的,页面请求的是新资源,不会有缓存问题。但是入口文件 index.html 会因为缓存造成更新问题,如果我们更新了,但是浏览器使用的是缓存,就会出现问题。所以需要对入口文件设置不使用强制缓存,需要每次去服务器验证文件是否修改,即使用协商缓存。

server {
  listen       80;
  server_name  域名;
  root   文件目录;
  index  index.html;
  location  {
  // 不加这一句,会出现nginx欢迎页面,无法正确加载资源
  try_files $uri /index.html;
  }
  location ~ .*\.(html)$ {
    // 对html文件限制缓存
    add_header Cache-Control no-store;
     // 不缓存
     // 或者用add_header Cache-Control no-cache;替代上面那一句,协商缓存
     add_header Pragma no-cache
  }
}

方法二:

  1. 最直接的办法
    Internet 选项 -> Internet 临时文件“设置” -> “每次访问此页时检查”,缺点是要设置每台客户端,客户端较多时不可取

  2. 设置网页头(header)文章来源地址https://www.toymoban.com/news/detail-524931.html

状态码

  1. 200 from memory cache
    • 状态码是灰色的,从内存中读取缓存的资源,强缓存。不请求服务器。
    • 页面关闭会被内存释放,再次打开相同页面需要重新请求服务器,然后重新缓存在浏览器
    • 脚本、字体、图片会被存放在内存中
  2. 200 from disk cache
    • 状态码是灰色的,从磁盘中读取缓存的资源,强缓存,不请求服务器。
    • 页面关闭不会被释放,这部分资源存在电脑磁盘中,只有用户手动清除浏览器缓存才会被释放。
    • 较大的 css 文件、js 文件和 jpg 图片会存入硬盘
  3. 200
    • 服务器请求响应的数据
  4. 304
    • 协商缓存。请求访问服务器,发现资源没有更新,使用本地资源。

磁盘和内存的区别

  1. 内存是计算机的工作场所,磁盘是用来存放暂时不用的信息
  2. 信息保存不同,内存中的信息会随刷新丢失,磁盘中的信息可以长久保存(除非手动删除)
  3. 磁盘的容量远大于内存
  4. cpu 只能读取内存里的数据,磁盘是作为存储空间的。

浏览器三级缓存原理

  1. 先查找内存,如果内存中存在,从内存中加载
  2. 如果内存中未找到,选择硬盘获取,如果硬盘中有,从硬盘中加载
  3. 如果硬盘中未找到,那就请求服务器,重新加载资源,加载到的资源缓存到硬盘和内存。

到了这里,关于前端浏览器缓存的好处和弊端以及如何处理弊端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 细说前端打包发布后,浏览器缓存如何清理?其实只需要简单的webpack配置就行

    有没有这么一种场景,项目上线后,客户使用过程中发现了bug,你急急忙忙改完,发布。但你发布后 测试人员或者客户会说:“你这改了没用啊”。 你:“清下缓存试试” 客户:“????” 那么这篇文章带你认识浏览器缓存,及清除浏览器的缓存办法。让你不再为了缓存

    2024年02月09日
    浏览(49)
  • 如何处理html5新标签的浏览器兼容问题?

    处理HTML5新标签的浏览器兼容问题,特别是针对较旧的浏览器,可以采用以下几种方法: 使用JavaScript创建元素 : 对于不支持HTML5新标签的浏览器,可以使用JavaScript(特别是Document Object Model,DOM)来创建这些元素。例如,可以使用 document.createElement(\\\'article\\\') 来在DOM中创建 art

    2024年01月21日
    浏览(41)
  • 解决前端项目问题,uniapp运行微信开发工具小程序,出现× initialize报错,以及浏览器无法运行

    uniapp进行小程序以及多端web页面都不知道如何配置讲项目运行起来。 就会报出无法运行错误。 [微信小程序开发者工具] - initialize [微信小程序开发者工具] [微信小程序开发者工具] × IDE may already started at port , trying to connect如图 这是因为没有配置好安全设置和运行设置。 一,

    2024年01月20日
    浏览(59)
  • 如何清理电脑浏览器缓存,4款常用浏览器清理缓存的方法

    浏览器是人们在网络生活中不可缺少的存在,我们使用各种浏览器上网的时候,可能会出现各种程序出错的问题。或者,可能使用浏览器的时间就了,发现电脑有点卡顿,这时候就需要情况缓存了。那么,如何清理电脑浏览器的缓存呢?下面分享4款常用浏览器清理缓存的方法

    2024年02月04日
    浏览(58)
  • 什么是浏览器同源策略?如何处理同源策略带来的跨域问题?

    浏览器的同源策略(Same-Origin Policy)是一种安全机制,用于限制一个网页文档或脚本如何与来自不同源的资源进行交互。同源是指两个 URL 的协议、主机和端口号都相同。 同源策略的目的是保护用户的隐私和安全。它可以防止恶意网站通过脚本访问其他网站的敏感信息或进行

    2024年02月16日
    浏览(27)
  • 浏览器缓存(强缓存、协商缓存)

    这一点主要解析浏览器缓存以及缓存机制的详细过程。 与缓存相关的状态码: 200 ok    从浏览器下载的最新资源 200 (from memory cache)    不进行http请求,直接从浏览器内存中读取的资源,页面关闭,则资源释放,一般一些脚本、图片、文字等会存在内存中 200 (from disk cache) 

    2024年04月17日
    浏览(41)
  • 浏览器强缓存与协商缓存

    强制缓存的思想是,在浏览器内置数据库中缓存每次请求中 “可以被缓存” (受到一些的管控)的静态资源如 image, css, js 文件, 当第二次请求被缓存过的资源时候,会通过校验两个字段 Expires 和 Cache-Control 的max-age字段(注意,Expires 是 http1.0 的产物, Cache-Control 则是

    2023年04月19日
    浏览(28)
  • 前端小程序,h5,浏览器,app, doc,.docx,.ofd,.PDF,.WPS以及Office文档的在线解析预览方式

    在线预览是将Word、PPT、Excel、PDF、OFD、音视频等文件在浏览器中解析查看。       我使用的是usdoc,也有用office online进行在线预览,不过注意的是使用usdoc的时候,我们先需要注册和添加预览的地址域名 usdoc的地址:http://www.usdoc.cn 进入用户中心,我们进行注册 注册好之后,先

    2024年02月11日
    浏览(56)
  • 浏览器缓存机制

    什么是浏览器缓存 浏览器缓存就是浏览器根据 url 第一次访问网站之后,将网站的 html、css、js、图片等文件复制一份保留到浏览器中,当你二次访问这个 url 的网站时,如果网站没有明确表示有更新时,浏览器直接在缓存中查找内容,不会再次请求网页内容,只有网页明确表

    2024年02月04日
    浏览(44)
  • 浏览器缓存原理

    使用 HTTP 缓存的好处 :通过复用缓存资源,减少了客户端等待服务器响应的时间和网络流量,同时也能缓解服务器端的压力。可以显著的提升网站的应用性能。 HTTP 缓存策略分为两种 :强制缓存、协商缓存。 强制缓存 浏览器缓存没有过期的时候可以直接决定使用缓存。 强

    2023年04月27日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包