当前位置: 首页 > news >正文

全球做网站最好辽宁大学网站怎么做

全球做网站最好,辽宁大学网站怎么做,建材网站建设公司,重庆seo推广前端缓存是所有前端程序员在成长历程中必须要面临的问题#xff0c;它会让我们的项目得到非常大的优化提升#xff0c;同样也会带来一些其它方面的困扰。大部分前端程序员也了解一些缓存相关的知识#xff0c;比如#xff1a;强缓存、协商缓存、cookie等#xff0c;但是我…前端缓存是所有前端程序员在成长历程中必须要面临的问题它会让我们的项目得到非常大的优化提升同样也会带来一些其它方面的困扰。大部分前端程序员也了解一些缓存相关的知识比如强缓存、协商缓存、cookie等但是我相信大部分的前端程序员不了解它们的缓存机制。接下来我将带你们深入理解缓存的机制以及缓存时间的判断公式如何合理的使用缓存机制来更好的提升优化。我将会把前端缓存分成HTTP缓存和浏览器缓存两个部分来和大家一起聊聊。 HTTP 缓存 HTTP是一种超文本传输协议它通常运行在TCP之上从浏览器Network中可以看到它分为Respnse Headers响应头、Request Headers请求头两部分组成。 接下来介绍一下与缓存相关的头部字段 expires 我们先来看一下MDN对于expires的介绍 响应标头包含响应应被视为过期的日期/时间。 备注 如果响应中有指令为 max-age 或 s-maxage 的 Cache-Control 标头则 Expires 标头会被忽略。 Expires: Wed, 24 Apr 2024 14:27:26 GMTCache-Control Cache-Control是HTTP/1.1中定义的缓存字段它可以由多种组合使用,分开列如max-age、s-maxage、public/private、no-cache/no-store等 Cache-Control: max-age3600, s-maxage3600, publicmax-age是相对当前时间单位是秒当设置max-age时则expires就会失效max-age的优先级更高。 而 s-maxage 与 max-age 不同之处在于其只适用于公共缓存服务器比如资源从源服务器发出后又被中间的代理服务器接收并缓存。 public是指该资源可以被任何节点缓存而private只能提供给客户端缓存。当设置了private之后s-maxage则会无效 。 强缓存 强缓存的具体流程如下 上面我们介绍了expires设置的是绝对的时间它会根据客户端的时间来判断所以会造成expires不准确如果我有一个资源缓存到到期时间是2024年4月31日我将客户端时间修改成过期的时间则在一次访问该资产会重新请求服务器获取最新的数据。 而max-age则是相对的时间它的值是以秒为单位的时间但是max-age也会不准确。 那么到底浏览器是怎么判断该资源的缓存是否有效的呢这里就来介绍一下资源新鲜度的公式。 我们来用生活中的食品新鲜度来举例 食品是否新鲜 (生产日期 保质期) 当前日期那么缓存是否新鲜也可以借助这个公式来判断 缓存是否新鲜 (创建时间 expire || max-age) 缓存使用期这里的创建时间可以理解为服务器返回资源的时间它和expires一样是一个绝对时间。 缓存使用期 响应使用期 传输延迟时间 停留缓存时间响应使用期 响应使用期有两种获取方式 max(0, responseTime - dateTimeage responseTime: 是指客户端收到响应的时间 dateTime: 是指服务器创建资源的时间 age是响应头部的字段通常是秒为单位 传输延迟时间 传输延迟的时间 客户端收到响应的时间 - 请求时间停留时间 停留时间 当前客户端时间 - 客户端收到响应的时间所以max-age也会失效的问题就是它也使用到了客户端的时间。 协商缓存 协商缓存的具体流程如下 从上文可以知道协商缓存就是通过Etag和Last-Modified这两个字段来判断。那么这个Etag的标识是如何生成的呢 我们可以看node中etag第三方库。 该库会通过isState方法来判断文件的类型如果是文件形式的话就会使用第一种方法通过文件内容和修改时间来生成Etag。 第二种方法通过文件内容和hash值和内容长度来生成Etag。 浏览器缓存 我们访问掘金的网站查看Network可以看到有Size列有些没有大小的而是disk cache、memory cache这样的标识。 memory cache翻译就是内存缓存顾名思义它是存储在内存中的优点就是速度非常快可以看到Time列是0ms缺点就是当网页关闭则缓存也就清空了而且内存大小是非常有限的如果要存储大量的资源的话还是使用磁盘缓存。 disk cache翻译就是磁盘缓存它是存储在计算机磁盘中的一种缓存它的优缺点和memory cache相反它的读取是需要时间的可以看到上方的图片Time列用了1ms的时间。 缓存获取顺序 浏览器会先查找内存缓存如果存在则直接获取内存缓存中的资源内存缓存没有就回去磁盘缓存中查找如果存在就返回磁盘缓存中的资源磁盘缓存没有那么就会进行网络请求获取最新的资源然后存入到内存缓存或磁盘缓存 缓存存储优先级 浏览器是如何判断该资源要存储在内存缓存还是磁盘缓存的呢 打开掘金网站可以看到发现除了base64图片会从内存中获取其它大部分资源会从磁盘中获取。 js文件是一个需要注意的地方可以看到下面的有些js文件会被磁盘缓存有些则会被内存缓存这是为什么呢 Initiator列表示资源加载的位置我们点击从内存获取资源的该列发现资源在HTML渲染阶段就被加载了列入一下代码 !DOCTYPE html html langenheadmeta charsetUTF-8 /titleDocumentÏ/titlescript srchttps://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js/script/headbodydiv idroot这样加载的js资源大概率会存储到内存中/div/body /html而被内存抛弃的可以发现就是异步资源这些资源不会被缓存到内存中。 上图我们可以看到有一个Initiator列的值是(index):50但是它还是被内存缓存了我们可以点击进去看到他的代码如下 这个js文件还是通过动态创建script标签来动态引入的。 Preload 与 Prefetch Preload和Prefetch也会影响浏览器缓存的资源加载。 Preload称为预加载用在link标签中是指哪些资源需要页面加载完成后立刻需要的浏览器会在渲染机制介入前加载这些资源。 link relpreload href//lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/0358ea0.js asscript当使用preload预加载资源时这些资源一直会从磁盘缓存中读取。 prefetch表示预提取告诉浏览器下一个页面可能会用到该资源浏览器会利用空闲时间进行下载并存储到缓存中。 link relprefretch href//lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/0358ea0.jsÏ使用 prefetch 加载的资源刷新页面时大概率会从磁盘缓存中读取如果跳转到使用它的页面则直接会从磁盘中加载该资源。 使用no-store表示不进行资源缓存。使用no-cache表示告知代理服务器不直接使用缓存要求向源服务器发起请求而当在响应首部中被返回时表示客户端可以缓存资源但每次使用缓存资源前都必须先向服务器确认其有效性这对每次访问都需要确认身份的应用来说很有用。 当然我们也可以在代码里加入 meta 标签的方式来修改资源的请求首部 meta http-equivCache-Control contentno-cache /示例 这里我起了一个nestjs的服务该getdata接口缓存10s的时间Ï代码如下 Get(/getdata)getData(Response() res: Res) {return res.set({ Expires: new Date(Date.now() 10).toUTCString() }).json({list: new Array(1000000).fill(1).map((item, index) ({ index, item: index index }))});Ï}第一次请求花费了334ms的时间。 第二次请求花费了163ms的时间走的是磁盘缓存快了近50%的速度 接下来我们来验证使用Cache-Control是否可以覆盖Exprie我们将getdata接口修改如下,Cache-Control设置了1s。Ï我们刷新页面可以看到getdata接口并没有缓存每次都会想服务器发送请求。 Get(/getdata)getData(Response() res: Res) {return res.set({ Expires: new Date(Date.now() 10).toUTCString(), Cache-Control: 1 }).json({list: new Array(1000000).fill(1).map((item, index) ({ index, item: index index }))});}仔细的同学应该会发现一个问题清除缓存后的第一次请求和第二次请求Size的大小不一样这是为什么呢 打开f12右键刷新按钮点击清空缓存并硬性重新加载。 我们开启Big request rows更方便查看Size的大小开启时Size显示两行第一行就是请求内容的大小第二行则是实际的大小。 刷新一下可以看到Size变成了283B大小了。 带着这个问题我们来深入研究一下浏览器的压缩。HTTP2和HTTP3的压缩算法是大致相同我们就拿HTTP2的压缩算法HPACK来了解一下。 HTTP2 HPACK压缩算法 HPACK压缩算法大致分为静态Huffman(哈夫曼)压缩和动态Huffman哈夫曼压缩所谓静态压缩是指根据HTTP提供的静态字典表来查找对应的请求头字段从而存储对应的index值可以极大的减少内催空间。 动态压缩它是在同一个会话级的第一个请求的响应里包含了一个比如 {list: [1, 2, 3]}那么就会把它存进表里面后续的其它请求的响应就可以只返回这个 header 在动态表里的索引实现压缩的目的 需要详细了解哈夫曼算法原理的可以去这个博客看一看。 Last-Modified 与 If-Modified-Since Last-Modified代表资源的最后修改时间其属于响应首部字段。当浏览器第一次接收到服务器返回资源的 Last-Modified 值后其会把这个值存储起来并下次访问该资源时通过携带If-Modified-Since请求首部发送给服务器验证该资源是否过期。 yaml 复制代码 Last-Modified: Fri , 14 May 2021 17:23:13 GMT If-Modified-Since: Fri , 14 May 2021 17:23:13 GMT如果在If-Modified-Since字段指定的时间之后资源都没有发生更新那么服务器会返回状态码 304 Not Modified 的响应。 Etag 与 If-None-Match Etag代码该资源的唯一标识它会根据资源的变化而变化着同样浏览器第一次收到服务器返回的Etag值后会把它存储起来并下次访问该资源通过携带If-None-Match请求首部发送给服务器验证资源是否过期 Etag: 29322-09SpAhH3nXWd8KIVqB10hSSz66 If-None-Match: 29322-09SpAhH3nXWd8KIVqB10hSSz66如果两者不相同则代表服务器资源已经更新服务器会返回该资源最新的Etag值。
http://www.sczhlp.com/news/165414/

相关文章:

  • wordpress搭建网站有什么好外wordpress主题多页面
  • 江汉建站公司淘客网站系统免费源码
  • e2ee网站开发网站颜色搭配案例
  • 网站SEO做点提升流量象客品牌策划案范本
  • jsp ajax网站开发典型实例pdf安徽建设工程信息网查询平台公司
  • 网站上面的体验卡怎么做凡科代理建站登录
  • 个人适合建什么网站广告设计公司创业计划书
  • 重庆最新网站备案一个完整的产品规划方案
  • 七台河建设网站苏州建站模板源码
  • 优秀网站建设公司电话河北二级建造师考试最新消息
  • 小学学校网站建设计划黄桃图片友情链接
  • wordpress付费开通站点深圳网站建设 外包合作
  • 想做一个自己的网站怎么做的济南网站优化推广公司电话
  • 单位网站备案要等多久口碑好的定制网站建设公司哪家好
  • 京东购物网站怎么做网站开发需求模板模板
  • mianf网站什么叫网络市场营销
  • 地方文明网站建设措施有没有专门做标书的网站
  • 邯郸做移动网站报价网站做qq链接代码
  • 制作网站比较大的几家公司温州有限公司
  • 织梦网站模板套用建设信息发布平台多少钱
  • 网站建设伍金手指下拉3营销策划方案的主要内容有哪些
  • 无锡哪里有做网站的小程序商店
  • 湖南涟钢建设有限公司网站销售珍珠网站建设策划书
  • 天津免费建设网站婚庆影楼型网站开发
  • 广东省城乡建设厅网站首页中铁建设集团有限公司怎么样
  • 中国建设银行的网站首页网站免费推广方法
  • 学校做安全台账是哪个网站马蹄网室内设计
  • 北京的互联网公司南通网站建设seo
  • 技术支持 东莞网站建设防水工程高端网站搭建公司
  • 化妆培训网站 源码知名的网站建设公司排名