首页 > 其他分享 >可观测性之如何识别网站文件命中了缓存?

可观测性之如何识别网站文件命中了缓存?

时间:2024-01-27 16:03:01浏览次数:28  
标签:文件 缓存 name list 识别 命中 entry 224

为了告慰良心,web developer搞了可视化、组件化、工程化、微前端、低代码。

网站平均加载时间依然客死在2s内。

讲的是如何判断网站使用的文件是缓存,有关使用的本地存储数据(ls、ss等)不在讨论范围。 说清楚范围后,说一下分类,这里的文件缓存有两类,第一类是:

  • disk cache
  • memory cache

这里的缓存,也就是网络所示中,标明缓存的部分:

可观测性之如何识别网站文件命中了缓存?_json

上图中,红框内就是缓存的文件。 如果服务器发版了,但是客户端依旧使用了缓存的文件,就可能会出现功能不一致、报错等情况。当然使用缓存文件,能够极大的提高网站的性能,至于定量分析,也不在本文章的技术讨论范畴。

在进入主题前,需要需要补充两方面的内容:

  • Performance.getEntries()
  • performanceObserver

因为根据上面两方面的内容能够看到,是能够获取到文件对象的。下面是获取对象的方法代码示例:

const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    
      console.log(entry);

  });
});

observer.observe({ type: "resource", buffered: true });

可观测性之如何识别网站文件命中了缓存?_json_02

下面的类型很多这里,我们只看跟文件有关的,其中包含可能的有: 来看一下这个对象都有哪些内容:

  • link
  • script
  • css
  • img
  • other

这部分只是掘金展示的内容,我们详细来看一下, 这里我们先看link这种类型,以此来了解这个对象都包含哪些内容,

可观测性之如何识别网站文件命中了缓存?_javascript_03

将详细的json贴入,能看到:

{
    "name": "",
    "entryType": "resource",
    "startTime": 224,
    "duration": 70.5,
    "initiatorType": "link",
    "nextHopProtocol": "h2",
    "renderBlockingStatus": "non-blocking",
    "workerStart": 0,
    "redirectStart": 0,
    "redirectEnd": 0,
    "fetchStart": 224,
    "domainLookupStart": 224,
    "domainLookupEnd": 224,
    "connectStart": 224,
    "secureConnectionStart": 224,
    "connectEnd": 224,
    "requestStart": 234.5,
    "responseStart": 291.40000000596046,
    "responseEnd": 294.5,
    "transferSize": 52326,
    "encodedBodySize": 52026,
    "decodedBodySize": 309469,
    "responseStatus": 0,
    "serverTiming": [
        {
            "name": "cdn-cache",
            "duration": 0,
            "description": "HIT"
        },
        {
            "name": "edge",
            "duration": 5,
            "description": ""
        }
    ]
}

mdn在performanceObserver的例子中,给出的有关如何判断304的代码

const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    if (entry.responseStatus === 304) {
      console.log(`${entry.name} was loaded from cache`);
    }
  });
});

observer.observe({ type: "resource", buffered: true });

上面代码即下图。

可观测性之如何识别网站文件命中了缓存?_json_04

同时,mdn给出了api的兼容性。

可观测性之如何识别网站文件命中了缓存?_json_05

看到上图,基本可以放心大胆的使用了。理想很丰满,然而现实却是骨感的。因为上图掘金中,明明使用缓存的文件,我们发现responseStatus有哪些:

  • 200
  • 204
  • 0即便明确有304的,我们也看不到。所以如何来判断304?代码如下:
entry.encodedBodySize > 0 && entry.transferSize > 0 && entry.transferSize < entry.encodedBodySize

所以,聪明的你,应该能够根据上面的代码推测出来,如果是磁盘或者文件缓存,entry.transferSize 应该是多少呢?

有关命中缓存的好处,就不在本文赘述。下图是本地测试中有关静态文件的response status的分布。

可观测性之如何识别网站文件命中了缓存?_缓存_06

标签:文件,缓存,name,list,识别,命中,entry,224
From: https://blog.51cto.com/u_12003135/9443887

相关文章

  • Python手相识别教程15指纹(斗和簸箕)
    15指纹指纹图案在胎儿发育的前18周内形成,并在人的一生中保持不变。每个人的指纹都是独一无二的,但可分为三种基本模式:环状(斗)、弓状(属于箕)和轮状(属于箕)。这些图案是个性特征的标志。俗语:“一斗穷,二斗富,三斗四斗卖豆腐,五斗六斗开当铺,七斗八斗坐着走,九斗十斗享清福。”实际不太准确!......
  • 完美解决 - 前端发版后浏览器缓存问题
    一、简介开发完发布新版本后,在有些电脑上总需要强刷才能获取到最新版本的内容,太恶心了。浏览器缓存(BrowserCaching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面......
  • 数据库安全||数据库安全性控制的方法及其实例(用户身份识别、存取控制、视图、审计、数
    数据库安全性控制是确保数据库系统中的数据不被非法访问、修改或破坏的一系列技术和策略。以下是数据库安全性控制的详细介绍:用户身份鉴别:静态口令鉴别:用户设置一个固定的密码,每次登录时使用相同的密码。动态口令鉴别:每次登录时生成一个新的密码,通常与时间或事件相关联,提高了安全性......
  • 安防视频汇聚平台智能边缘分析一体机视频算法分析识别打电话检测算法
    在智能视频监控的广阔舞台上,打电话检测算法如同一位细心的守护者,它基于图像处理和机器学习的先进技术,致力于识别和分析视频中的人物行为。这项技术不仅仅是一个简单的监控工具,它更是一种智能的分析手段,能够在复杂的场景中准确地判断个体是否在进行电话通话。首先,算法的工作流程是一......
  • 指纹面容识别登录流程概述
    近来在帮忙处理一个IOS端,指纹/面容登录的需求。独立的原生IOS开发人员,已经被优化掉了,我是革命一块儿砖,哪里需要哪里搬,-_-||。在此,对期间遇到的一些实践问题,做一个梳理备忘,也希望可以给其他产品及码农提供参考。本文主要侧重于,整体的移动端指纹/面容实现用户登录的解......
  • 安防视频汇聚平台智能边缘分析一体机视频算法分析识别打电话检测算法
    在智能视频监控的广阔舞台上,打电话检测算法如同一位细心的守护者,它基于图像处理和机器学习的先进技术,致力于识别和分析视频中的人物行为。这项技术不仅仅是一个简单的监控工具,它更是一种智能的分析手段,能够在复杂的场景中准确地判断个体是否在进行电话通话。首先,算法......
  • Redis缓存优化项目
    Redis数据库基础Redis数据库概述Redis是一个基于内存的key-value结构数据库,即非关系型数据库(NoSql)数据库并不是要取代关系型数据库,而是关系型数据库的一种补充。Redis是互联网技术领域使用最为广泛的存储中间件,他是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方......
  • Redis篇-redis使用场景-缓存-缓存雪崩-04
    1缓存雪崩缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。解决方案:给不同Key的TTL添加随机值;利用Redis集群提高服务的可用性;哨兵模式、集群模式给缓存业务添加降级限流策略;ngxin或springcloudGateway给业务添加......
  • go-zero配置DB的redis缓存
    配置定义:#catinternal/config/config.gopackageconfigimport( "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/core/stores/cache")typeConfigstruct{ rest.RestConf CacheRediscache.CacheConf}对应的配置文件:#cat......
  • 虹软sdk实现人脸识别小demo
    虹软官网:https://ai.arcsoft.com.cn注册后,下载适配的sdk注意提取下载的sdk中的jar包,代码中需要用到<dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactId><version>3.0.0.0</version><scope&......