监控浏览器页面展示性能的工具

news2024/11/20 18:43:50

        B/S架构,用户都是使用浏览器访问后端服务,产品在开发时需要关注用户的体验,不仅包含交互的友好,性能指标也非常重要。对于后端开发常见的性能指标,可能包含:reponse time,吞吐量等。此外,浏览器页面导航,html数据解析,生成可显示位图等待阶段的性能分析也十分重要,前端性能指标如下图所示。本篇文章,简单介绍两种获取浏览器页面展示的性能分析数据的工具。

一.Skywalking(8.2及以上)

1.安装依赖

npm install skywalking-client-js --save

本地的后台项目嵌入了前端ui的,所以安装的时候直接进入前端目录下进行安装即可。

安装成功之后如下图所示目录:

2.引入依赖

import ClientMonitor from 'skywalking-client-js';

在需要监控的页面引入 相应的依赖即可,如下图所示:

注意:skywalking追踪信息收集器有两个,一个是 gRPC的用于后端服务,一个是Http 收集客户端浏览器的采集信息 ,Http默认端口 12800,gRPC默认端口 11800,前端访问后台服务可能会存在跨域的问题,所以可在前端vue.config.js中配置相关的代理即可。

 3.配置成功,访问之后结果如图

二.Chrome Performance Api 监测网页性能

        chrome浏览器为我们提供了Performance性能检测调试工具。此外,W3C也定义了一套Performance标准,各个浏览器厂商基于标准提供了监控网络性能的一系列基础Api,这些Api可以提供检测白屏时间、首屏时间、用户可操作的时间节点,页面总下载的时间、DNS查询的时间、TCP链接的时间等。我们完全可以利用这个搭建一个简易的性能监控工具,当然监控系统包含了数据采集->数据存储->清洗->监控几个过程,不过目前我们这里简单运用一下Performance Api就只考虑采集阶段。

        performance的所有Api&property挂载在window下面的performance属性中,可以看到目前提供的一系列属性,关于各个属性的介绍,参照网上对api的解释,有大量资料可供查询。

如上图所示,performance包含三个对象,分别为 memory、navigation、timing。

  • memory:是和内存相关的,其提供对内存使用情况的描述,我们可以使用这个属性来订阅页面内存变化情况

    • jsHeapSizeLimit:堆内存大小的限制

    • totalJSHeapSize:总堆内存的大小

    • usedJSHeapSize:已经使用的堆内存大小

  • navigation:含义是页面的来源信息,表述页面怎么跳转过来的,该对象有2个属性值

    • redirectCount  记录重定向次数,如果有重定向的话,页面通过几次重定向跳转而来,默认为0

    • type  页面打开的方式,默认为0,可取值为「0:表示正常进入该页面(非刷新、非重定向)」、「1:表示通过 window.location.reload 刷新的页面」、「2:表示通过浏览器的前进、后退按钮进入的页面」、「255:表示非以上的方式进入页面的」

  • timing:提供页面加载过程中一系列关键时间点的高精度测量,它包含了网络、解析、加载等一系列的时间数据,我们监控网页性能也是基于此提供的属性。为了方便理解,从网上找了一张图片来解释关键节点的含义。

  • navigationStart  一个页面卸载结束时的时间戳。如果没有上一个页面的话,那么该值会和fetchStart的值相同

  • redirectStart : 第一个http重定向开始的时间戳,如果没有重定向,或者重定向到一个不同源的话,那么该值返回为0

  • redirectEnd : 最后一个HTTP重定向完成时的时间戳。如果没有重定向,或者重定向到一个不同的源,该值也返回为0

  • fetchStart : 浏览器准备好使用http请求抓取文档的时间(发生在检查本地缓存之前)。

  • domainLookupStart : DNS域名查询开始的时间,如果使用了本地缓存话,或持久链接,该值则与fetchStart值相同

  • domainLookupEnd : DNS域名查询完成的时间,如果使用了本地缓存话,或 持久链接,该值则与fetchStart值相同

  • connectStart : HTTP 开始建立连接的时间,如果是持久链接的话,该值则和fetchStart值相同,如果在传输层发生了错误且需要重新建立连接的话,那么在这里显示的是新建立的链接开始时间

  • secureConnectionStart : HTTPS 连接开始的时间,如果不是安全连接,则值为 0

  • connectEnd:HTTP完成建立连接的时间(完成握手)。如果是持久链接的话,该值则和fetchStart值相同,如果在传输层发生了错误且需要重新建立连接的话,那么在这里显示的是新建立的链接完成时间

  • requestStart : http请求读取真实文档开始的时间,包括从本地读取缓存,链接错误重连时

  • responseStart : 开始接收到响应的时间(获取到第一个字节的那个时候)。包括从本地读取缓存

  • responseEnd  HTTP响应全部接收完成时的时间(获取到最后一个字节)。包括从本地读取缓存

  • unloadEventStart : 前一个网页(和当前页面同域)unload的时间戳,如果没有前一个网页或前一个网页是不同的域的话,那么该值为0

  • unloadEventEnd : 和 unloadEventStart 相对应,返回是前一个网页unload事件绑定的回调函数执行完毕的时间戳。

  • domLoading : 开始解析渲染DOM树的时间

  • domInteractive : 完成解析DOM树的时间(只是DOM树解析完成,但是并没有开始加载网页的资源)

  • domContentLoadedEventStart  DOM解析完成后,网页内资源加载开始的时间

  • domContentLoadedEventEnd : DOM解析完成后,网页内资源加载完成的时间

  • domComplete : DOM树解析完成,且资源也准备就绪的时间。Document.readyState 变为 complete,并将抛出 readystatechange 相关事件

  • loadEventStart : load事件发送给文档。也即load回调函数开始执行的时间,如果没有绑定load事件,则该值为0

  • loadEventEnd : load事件的回调函数执行完毕的时间,如果没有绑定load事件,该值为0

可以通过performance api来实现我们经常关注的一些指标的计算和上报,如下图所示,主要是参考基调听云的指标:https://demo.tingyun.com/doc/browser/metric/indicator.html

//来自于用户访问时的浏览器的performance api获取
var item = performance.timing;
const dnsTime = item.domainLookupEnd - item.domainLookupStart;
const isSSL = item.name.includes("https");
const sslTime = isSSL ? item.connectEnd - item.secureConnectionStart : 0;
const tcpEnd = isSSL ? item.secureConnectionStart : item.connectEnd;
const tcpTime = tcpEnd - item.connectStart;
const stalledTime = item.requestStart - item.fetchStart - dnsTime - tcpTime - sslTime;

//Stalled:[item.fetchStart, item.fetchStart + stalledTime]
//DNS:[item.domainLookupStart, item.domainLookupEnd]
//TCP:[item.connectStart, tcpEnd]
//SSL: [tcpEnd, item.connectEnd]
//请求响应: [item.requestStart, item.responseStart]
//内容传输: [item.responseStart, item.responseEnd]

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

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

相关文章

360加固APP后启动崩溃—注意加固前后签名是否一致

如下截图所示,我今天就是遇到了这个问题,这个问题是比较好解决,但如果官网有显眼指引说明会不会对开发者更友好些呢? 首先我们给360的加固包是带有自己的签名的,然后经360加固过后(免费的加固服务&#xf…

【JavaEE】cookie和session

cookie和session cookie什么是 cookieServlet 中使用 cookie相应的API Servlet 中使用 session 相应的 API代码示例: 实现用户登陆Cookie 和 Session 的区别总结 cookie 什么是 cookie cookie的数据从哪里来? 服务器返回给浏览器的 cookie的数据长什么样? cookie 中是键值对…

[ poi-表格导出 ] java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

解决报错: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错描述: 表格导出本来使用正常,偶然就报了以上错误…

ai问答网站有哪些

1、Mental AI MentalAI(https://ai.ciyundata.com/)是一种基于星火大模型和文心大模型的知识增强大语言模型,专注于自然语言处理(NLP)领域的技术研发。 它具备强大的语义理解和生成能力,能够处理各种复杂的…

KaiwuDB 获山东省工信厅“信息化应用创新优秀解决方案”奖

10月23日,山东省工信厅正式公示《2023年山东省信息化应用创新典型应用案例及优秀解决方案名单》,面向全省、全国重点推荐山东省技术水平先进、应用示范效果突出、产业带动性强的信息化解决方案及应用实践,对于进一步激发山东省信息技术产业创…

一文速通 StarRocks 数据库:核心概念、架构与特性

Author: Xinyao Tian 概述 本文档简要梳理了 StarRocks 的基本信息。 简介 Introduction StarRocks 是面向下个时代的,高性能的数据分析仓库。其提供了实时、多维度、高并发的数据分析能力。 StarRocks is a next-gen, high-performance analytical data warehou…

C#和HttpClient结合示例:微博热点数据分析

概述 微博是中国最大的社交媒体平台之一,它每天都会发布各种各样的热点话题,反映了网民的关注点和舆论趋势。本文将介绍如何使用C#语言和HttpClient类来实现一个简单的爬虫程序,从微博网站上抓取热点话题的数据,并进行一些基本的…

9. linux系统设置开机自启动发射热点

1. 说明 某种情况下需要使用wifi进行通信时,可以在linux系统中发射一个热点让以使别的设备能够连接,然后进行通信。一般情况下可以在有无线wifi发射器的情况下,每次linux系统开机后,手动设置开启热点,但这种方式比较麻…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起,所有升级到HarmonyOS 4的手机用户在美团外卖下单后,可通过屏幕上的一个“小窗口”,随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”,就是实况窗功能。 实况窗:简…

githu访问慢解决方法-mac系统

1.访问链接:https://site.ip138.com/github.global.ssl.fastly.net/ 2.分别输入github.com,github.global.ssl.fastly.net进行ip解析 3.打开host文件 sudo vim /etc/hosts4.将在2步骤中的信息添加到host文件中 20.205.243.166 gith…

AI芯片2022-架构师(六十五)

1、AI芯片是当前人工智能技术发展的核心技术,其能力要支持训练和推理。通常,AI芯片的技术架构包括()第三种。 A、GPU、FPGA、ASIC B、CPU、PPGA、DSP C、GPU、CPU、ASIC D、GPU、FPGA、SOC 解析: GPU图形处理&am…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(七):有损传输线的衰减

当正弦波信号沿着传输线传播时,电压幅度呈指数下降。总衰减(以 dB 为单位)随长度线性增加。在 FR4 中,1 GHz 信号的典型衰减可能为 0.1 dB/英寸。在传播1英寸时,衰减为0.1dB,信号幅度已下降至在传播 10 英寸…

逻辑漏洞挖掘之CSRF漏洞原理分析及实战演练 | 京东物流技术团队

一、前言 2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟,数据安全的重要性愈加凸显,这也更加坚定了我们推行安全测试常态化的决心。随着测试组安全测试常态化的推进,有更多的同事对逻辑漏洞产生了兴趣,本系列文章旨在…

QCustomPlot 瀑布图色度条

1、单独应用在一个QWidget中。 通过新建一个瀑布图后移除瀑布图即可只留住色度条。 QCustomPlot *customPlot ui->widget;QCPColorScale *colorScale new QCPColorScale(customPlot);customPlot->plotLayout()->addElement(0, 1, colorScale); // add it to the ri…

龙迅LT2611UXC 双PORT LVDS转HDMI(2.0)+音频

.描述: LT2611UXC是一个高性能的LVDS到HDMI2.0的转换器,用于STB,DVD应用程序。 LVDS输入可配置为单端口或双端口,有1个高速时钟通道,3~4个高速数据通道,最大运行1.2Gbps/通道,可支持高达9.6Gb…

Android 10适配外部存储方案

Android Api 29 对文件和文件夹进行了重大更改。不允许使用外部存储,如下方法: Environment.getExternalStorageDirectory() /mnt/sdcard Environment.getExternalStoragePublicDirectory(“test”) /mnt/sdcard/test 只能使用内部存储 getExterna…

实用篇-Linux

一、Linux介绍 linux特点 免费开源多用户多任务 Linux系统版本分为内核版和发行版 发行版是基于内核版进行扩展,由各个Linux厂商开发和维护,因为我们真正使用linux最终安装的其实是linux的发行版 下面以CentOS为例来学习Linux 二、Linux安装 安装方式…

S32DS踩坑日记三-使用EEPROM

这个片子的EEPROM是用普通的flash模拟的,所以配置比较复杂。需要先增加flash,然后再配置模拟EEPROM那块的电路。 这个模拟的大概意思是这样:片子内置一块用于数据存储的flash,叫D-flash,大小是64K,起始地址…

SHCTF-校外赛道 2023 WEB部分题解wp()

[WEEK1]babyRCE 开题,直接给了源码,简单过滤。 被过滤绕过方法cat/tacuniqflagfla?空格%09 payload: ?rcels%09/?rceuniq%09/fla?[WEEK1]1zzphp 考点:intval()函数绕过(数组)、PCRE回溯次数限制绕过 直接给了…

大数据之LibrA数据库系统告警处理(ALM-12005 OKerberos资源异常)

告警解释 告警模块对Manager中的Kerberos资源的状态进行监控,当Kerberos资源异常时,系统产生此告警。 当Kerberos资源恢复时,且告警处理完成时,告警恢复。 告警属性 告警参数 对系统的影响 Manager中的Kerberos资源异常&#…