可观测系统如何识别网站有多少文件命中了缓存?

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 文章首发于掘金,属于小众的技术文,讲的是如何判断网站使用的文件是缓存,也就是disk cache ,memory cache 还有304

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

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

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

  • disk cache
  • memory cache

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

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

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

  • Performance.getEntries()
  • performanceObserver 因为根据上面两方面的内容上面两方面的内容我们能够看到,我们是能够获取到文件的对象的。下面是获取对象的方法代码示例:
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
      console.log(entry);
  });
});
observer.observe({ type: "resource", buffered: true });
复制代码

网络异常,图片无法展示
|
下面的类型很多这里,我们只看跟文件有关的,其中包含可能的有: 来看一下这个对象都有哪些内容:

  • link
  • script
  • css
  • img
  • other

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

网络异常,图片无法展示
|

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

{
    "name": "https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web_editor/css/app.926bb8b0.css",
    "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 });
复制代码

上面代码即下图。

网络异常,图片无法展示
|

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

网络异常,图片无法展示
|

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

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

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

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

网络异常,图片无法展示
|


作者:Yestodorrow

链接:https://juejin.cn/post/7212576051166511162

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
2月前
|
缓存 安全 UED
网站图片缓存设置不当可能会导致哪些问题?
【10月更文挑战第18天】网站图片缓存的合理设置至关重要,需要综合考虑图片的性质、更新频率、用户体验、服务器性能等多方面因素,以避免出现上述各种问题,确保网站的正常运行和用户信息的安全。
|
22天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
160 78
|
3月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
87 6
|
3月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
97 15
Android 系统缓存扫描与清理方法分析
|
2月前
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
2月前
|
缓存 监控 测试技术
如何利用浏览器的缓存来优化网站性能?
【10月更文挑战第23天】通过以上多种方法合理利用浏览器缓存,可以显著提高网站的性能,减少网络请求,加快资源加载速度,提升用户的访问体验。同时,要根据网站的具体情况和资源的特点,不断优化和调整缓存策略,以适应不断变化的业务需求和用户访问模式。
112 7
|
3月前
|
SQL 缓存 Java
JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)
这篇文章详细介绍了JVM中类文件的初始化过程、硬件层面的数据一致性问题、缓存行和伪共享、指令乱序执行问题,以及如何通过`volatile`关键字和`synchronized`关键字来保证数据的有序性和可见性。
41 3
|
3月前
|
缓存 弹性计算 应用服务中间件
如何使用 Wordpress?托管, 网站, 插件, 缓存
如何使用 Wordpress?托管, 网站, 插件, 缓存
|
4月前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
145 12
|
5月前
|
缓存 架构师 数据库
缓存系统稳定性 - 架构师峰会演讲实录
缓存系统稳定性 - 架构师峰会演讲实录
下一篇
开通oss服务