sdk监控平台

news2024/12/26 17:32:19

监控平台实现方案

监测网页加载时长是关注的是以下5个过程:

1.重定向时间:获取此网页前重定向所花费的时间

2.DNS域名查找时间:查找此网页的DNS所花费的时间

3.TCP服务器连接时间:用户连接到您的服务器所需的时间

4.服务器响应时间:您的服务器响应用户请求所需的时间,其中爆哭哟从用户所在位置连接到您的服务器所需的网络时间

5.网页下载时间:下载网页所需的时间

访问单页面经历的阶段

1.页面准备阶段 cache dns解析 tcp连接 ssl证书

2.页面加载阶段 html解析 css解析 js解析

3.页面渲染阶段 dom渲染 css渲染

4.页面交互阶段 js执行

性能指标

FP(First Paint)首次绘制:页面开始绘制的时间,包括任何文本、图像(包括背景图片)、非白色的canvas和svg元素

FCP(First Contentful Paint)首次内容绘制:浏览器将第一个DOM元素绘制到屏幕上的时间

LCP(Largest Contentful Paint)最大内容绘制:最大内容元素(文本、图片、视频等)加载并渲染到屏幕上的时间

FID(First Input Delay)首次输入延迟:用户首次与页面交互(例如点击链接、按钮等)到浏览器实际能够响应该交互的时间

CLS(Cumulative Layout Shift)累计布局偏移:测量整个页面生命周期内发生的所有意外布局偏移的度量值

TTI(Time to Interactive)可交互时间:页面完全加载并可以开始响应用户交互的时间

LCP(Largest Contentful Paint)最大内容绘制:最大内容元素(文本、图片、视频等)加载并渲染到屏幕上的时间

TBT(Total Blocking Time)总阻塞时间:测量主线程在首次内容绘制之前被阻塞的总时间

FMP(First Meaningful Paint)首次有意义绘制:页面主要内容加载并渲染到屏幕上的时间

TTFB(Time To First Byte)首字节时间:浏览器从服务器接收到第一个字节的时间
 

web-vitals 第三方库

能够自动统计页面各阶段加载时间 FP FCP CLS LP等等
 

PerformanceObserver性能监测对象

PerformanceObserver 用于监测性能度量事件,在浏览器的性能时间轴记录新的 performance entry 的时候将会被通知。

开发之前,要理解很多概念:

1.了解PerformanceObserver是什么?

概念:PerformanceObserver 用于监测性能度量事件,在浏览器的性能时间轴记录新的 performance entry 的时候将会被通知。

应用:

// 可以尝试输出performance.getEntries()
// 会得到页面上的静态资源加载耗时与资源大小

上面这一坨是什么???

这个就是每个静态资源在渲染,加载中的“痕迹”,开始渲染时间,结束时间,DNS解析时间,TCP链接时间,请求时间,响应时间,首字节加载时间,协议,各种资源大小等等等等,只要涉及到的数据,都会被记录在相应对象里。

2.大致了解了以后,说一下具体的使用方法

// 同performance.getEntries()输出一样,统计静态资源
function entryHandle(list) {
    const entries = list.geteEntries();
    for (const entry of entries) {
        console.log(entry);
        // 打印结果
        // 可以根据对象的属性,得到想要统计的数值
        // 发送数据进行上报
    }
}
let observer = new PerformanceObserver(entryHandle)
observer.observe({type: ['resource'], buffered: true})// 统计静态资源
// observer.observe({type: 'paint', buffered: true}); // 统计fp/fcp
// observer.observe({type: 'largest-contentful-paint', buffered: true}); // 统计lcp

知道了这些所有的数据了,下面要做的,就是先统计需要的指标

1.静态资源

2.fp/fcp

3.统计lcp

4.页面加载时间

5.埋点

6.pv/uv

7.等等,待补充

截止2024.08.28,已经写好了前4个统计方法,后续全部写完,打包后供开发者使用

结合上一篇文章关于各个时间的统计,下面是其中observerEntries.js的代码,完整代码请见(目前正在开发中):

https://github.com/Mr-Shi-root/sdk-platform

// 静态资源需要在页面加载完成后调用
// 所以在页面加载完调用或者增加监听事件,在load时调用
export default function observerEntries(){
    if (document.readyState == 'complete') {
        observerEvent()
    } else {
        const onLoad = () => {
            observerEvent()
            window.removeEventListener('load', onLoad)
        } 
        window.addEventListener('load', onLoad, true)
    }
}


// 统计所有静态资源的方法
export function observerEvent() {
    const entryHandle = (list) => {
        const entries = list.geteEntries();
        for (const entry of entries) {
            if(observer) {
                observer.disconnect();
            }
            // 需要上报的参数
            const reporData = {
                name: entry.name,
                type: 'performance', //类型
                subType: entry.entryType, // 类型
                pageUrl: entry.initiatorType, // 资源管理
                duration: entry.duration, //  耗时
                dns: entry.domainLookupEnd - entry.domainLookupStart, // dns解析时间
                tcp: entry.connectEnd - entry.connectStart, // tcp连接时间
                redirect: entry.redirectEnd - entry.redirectStart, // 重定向时间
                // TODO: 看下要不要减后面的requestStart
                ttfb: entry.responseStart - entry.requestStart, // 首字节时间
                protocol: entry.nextHopProtocol, // 协议
                responseBodySize: entry.transferSize, // 响应大小
                responseHeaderSize: entry.transferSize - entry.encodedBodySize, // 响应头大小
                transferSize: entry.transferSize, // 请求内容大小
                resourceSize: entry.decodedBodySize, // 响应内容大小(资源解压后的大小)
                startTime: performance.now(), 
            }
            console.log(entry);
            // 发送数据进行上报
        }
    }
    let observer = new PerformanceObserver(entryHandle)
    observer.observe({type: ['resource'], buffered: true})
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于文心智能体平台打造的德语学习助手

德语学习助手:您的智能德语语言学专家 在学习德语的道路上,是否曾遇到过这样的困扰:不知道自己的德语水平如何?学习过程中缺乏系统的计划?在日常交流中总是担心表达不准确?或者在面对德语文本时&#xff0c…

[深度学习] 时间序列分析工具TSLiB库使用指北

TSLiB是一个为深度学习时间序列分析量身打造的开源仓库。它提供了多种深度时间序列模型的统一实现,方便研究人员评估现有模型或开发定制模型。TSLiB涵盖了长时预测(Long-term forecasting)、短时预测(Short-term forecasting&…

【力扣】划分为k个相等的子集

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 给定一个整数数组 …

Learn OpenGL In Qt之系列简介

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 个人主页: rainInSunny | 个人专栏: C那些事儿、 Learn OpenGL In Qt 文章目录 传送门写在前面为什么是OpenGL和Qt能学到什么能做点什么国漫女神炫酷进度冷酷机器人 传送门 待更新 写在前面 本博客系列将带领读…

Vue——初识vue

目录 1.浏览器控制台报错 2.Vue入门 3.Vue模版语法 4.数据绑定 5.el与data的两种写法 总结 本系列属于纯干货系列,我们也不多说,直接上干货。 1.浏览器控制台报错 GET http://127.0.0.1:5500/favicon.ico 404 (Not Found) 具体如下图 这是为什么…

自己动手写CPU_step5_移动指令

移动操作指令 define EXE_MOVN 6b001011 //不等于0转移 if rt ! 0 then rs -> rd define EXE_MOVZ 6b001010 //等于0转移 if rt 0 then rs -> rd define EXE_MFHI 6b010000 // hi -> rd define EXE_MFLO 6b010010 // lo…

一步迅速了解Spring框架的几个特点

一,特点1:IOC(控制反转) 1,IOC是什么 反转控制”(Inverse of Control) 不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理 2,IOC的作用 IOC 容器…

tensor core实现矩阵乘法的详细解读

之前关于tensor core的介绍可以参考链接添加链接描述 基础的tensor core实现C=AB的代码可以参考下面这段内容: 上面代码的几个注意事项: 首先是加载mma.h头文件,这个是包含wmma模板类的头文件。 其次是设置的WMMA_M=16,WMMA_N=16,WMMA_K=8,这三个参数的表示的意思是,对于…

乐凡三防:工业界的硬核产品——重新定义三防平板的极限

在工业4.0的浪潮中,科技与制造业的深度融合催生了一系列高性能、高耐用的智能产品。乐凡三防平板,作为工业界的新宠,正以其卓越的防护性能和强大的功能,重新定义了三防平板的极限,成为硬核科技的代表。 硬核防护&#…

Marching Cubes 算法三探

Marching Cubes 算法再探 CUDA SamplesMarchingCubesworkflowCodedata structurecomputeIsosurfacelaunch_classifyVoxelclassifyVoxel ThrustScanWrapperlaunch_compactVoxelscompactVoxels launch_generateTriangles2generateTriangles2 improvements 初探再探三探&#xff0…

翻译软件推荐:有道翻译及其他选择!

一款好的翻译软件不仅能帮助我们跨越语言障碍,还能提升我们的工作效率。今天,我将为大家深入介绍几款亲测好用的翻译工具:福昕在线翻译、福昕翻译客户端、海鲸AI翻译以及有道翻译。 福昕在线翻译 链接: https://fanyi.pdf365.cn…

write your own xx-starter【1】

在springboot 中,我们加入例如mybatis-spring-boot-starter,接着在application.yml配置数据库信息,就可以使用mybatis了,无需我们手动进行配置 这就是springboot威力,那么他是如何实现的呢?简单来说类似于…

Java面向接口编程—习题

Java面向接口编程—习题 Java面向接口编程—习题 Java面向接口编程—习题需求实现思路具体步骤1.步骤一:创建接口2.步骤2:创建接口的实现类3.步骤3:创建一个厂商4.步骤四:创建测试类 需求 说明采用面向接口编程思想组装一台计算机计算机的主…

【RabbitMQ工作原理相关】

RabbitMQ如何保证消息不丢失 开启生产者确认机制,确保生产者的消息能到达队列开启持久化功能,确保消息未消费前在队列中不会丢失开启消费者确认机制为auto,由spring确认消息处理成功后完成ack开启消费者失败重试机制,多次重试失败后将消息投递到异常交换机,交由人工处理 Rabb…

Linux Debian12安装Peek录屏软件,录制gif动态图

一、Peek安装 在Debian 12 (codenamed “Bookworm”) 上安装 Peek 录屏软件,可以通过以下步骤进行: 1.打开终端。 2.更新系统的包索引: sudo apt update3.安装 Peek 的依赖项: sudo apt install peek如果你遇到问题&#xff…

【大模型LLMs】文本分块Chunking调研LangChain实战

【大模型LLMs】文本分块Chunking调研&LangChain实战 Chunking策略类型1. 基于规则的文本分块2. 基于语义Embedding分块3. 基于端到端模型的分块4. 基于大模型的分块 Chunking工具使用(LangChain)1. 固定大小分块(字符&token&#xff…

IC-Light还原细节的节点 DetailTransfer使用时报错-comfyui

🎈问题描述 今天在调试一个工作流节点的时候,遇到一个问题: Error occurred when executing DetailTransfer: The size of tensor a (848) must match the size of tensor b (853) at non-singleton dimension 2 File "F:\ComfyUI-aki\…

Volvo EDI 项目测试流程详解

近期知行帮助多个供应商成功对接Volvo EDI,这些案例中,供应商收到Volvo发来的EDI需求是基本一致的: 传输协议选择OFTP报文标准选择EDIFACT业务单据包括:DELFOR交付预测以及DESADV发货通知 扩展阅读:汽车EDI&#xff…

车规级CAN总线外围电路设计方案

目录 1、共模电感 1.1、电感值 1.2、泄漏电感 1.3、直流电阻 1.4、CMC的模式转换特性 2、终端分立电阻 3、总线电容 4、ESD保护二极管 在汽车领域,电磁兼容性(EMC)问题一直备受瞩目。相较于传统汽车,新能源汽车的EMC挑战更…

如何使用ssm实现社区智慧养老监护管理平台+vue

TOC ssm270社区智慧养老监护管理平台vue 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台,并在此基础上提供实时、快捷、高效、低成本的,物联化、互联化、智能化的养老服务。 随着科技进步,新型养…