Web API——Performance属性了解和使用

性能监控一直是前端的一个重点工作,本文介绍在做性能监控时,必须要了解的一个Web API——performance,主要了解它的的属性和使用。

一、window.performance

1、Performance 是一个标准,用于解决开发者在浏览器中获取性能数据的问题。

2、Performance 同时也是一个浏览器全局对象,提供了一组 API 用于获取程序在某些节点的性能数据。它包含一组高精度时间定义,以及配套的相关方法。

通过performance对象可以获取到当前页面中与性能相关的信息。
在这里插入图片描述
属性值说明

  • eventCounts:记录了所有已经分发过的 Event,处理时间是否大于 50ms。

  • memory: 记录内存属性

    • usedJSHeapSize,JS 对象(包括V8引擎内部对象)占用的内存
    • totalJSHeapSize,可使用的内存
    • jsHeapSizeLimit,内存大小限制
  • navigation:返回一个 PerformanceNavigation 对象,这个对象表示出现在当前浏览上下文的 navigation 类型,比如获取某个资源所需要的重定向次数

    • redirectCount:只读,表示在到达这个页面之前重定向了多少次
    • onresourcetimingbufferfull:当浏览器的资源时间性能缓冲区已满时会触发
    • type:表示是如何导航到这个页面的,一般用来检测页面时如何跳转过来的。
含义
0当前页面是通过点击链接,书签和表单提交,或者脚本操作,或者在url中直接输入地址,type值为0
1点击刷新页面按钮或者通过window.location.reload() 方法显示的页面
2页面通过历史记录和前进后退访问时
255其他方式进入的页面
  • timeOrigin:返回性能测量开始时的时间的高精度时间戳。

  • timing:最重要的属性,包含了网络、解析等一系列的时间数据,常用于页面性能分析。

    一张图来了解timing,如下:
    在这里插入图片描述
    常用性能指标计算公式:

  • DNS查询耗时 = domainLookupEnd - domainLookupStart

  • TCP链接耗时 = connectEnd - connectStart

  • request请求耗时 = responseEnd - responseStart

  • 解析dom树耗时 = domComplete - domInteractive

  • 白屏时间 = domloading - fetchStart

  • domready时间 = domContentLoadedEventEnd - fetchStart

  • onload时间 = loadEventEnd - fetchStart

使用注意事项:

因为很多值必须在页面完全加载之后才能得出,建议最好在window.onload事件中读取各种数据。

使用示例:

// 兼容性写法
const performance = window.performance || window.msPerformance || window.webkitPerformance;                    

const timing = performance && performance.timing;
const navigation = performance && performance.navigation;

// DNS 解析耗时
const dns = timing.domainLookupEnd - timing.domainLookupStart;

// TCP 链接耗时
const conn = timing.connectEnd - timing.connectStart;

// 等待服务器响应耗时(注意是否存在cache)
const request = timing.responseStart - timing.requestStart;

// 内容加载耗时(注意是否存在cache)
const response = timing.responseEnd - timing.responseStart;

// 总体网络交互耗时,即开始跳转到服务器资源下载完成
const network = timing.responseEnd - timing.navigationStart;

// 渲染处理
const processing = (timing.domComplete || timing.domLoading) - timing.domLoading;

// 抛出load事件
const load = timing.loadEventEnd - timing.loadEventStart;

// 总耗时
const total =
  (timing.loadEventEnd || timing.loadEventStart || timing.domComplete || timing.domLoading) -
  timing.navigationStart;

// 可交互
const active = timing.domInteractive - timing.navigationStart;

// 请求响应耗时,即T0,注意cache
const t0 = timing.responseStart - timing.navigationStart;

// 首次出现内容,即T1
const t1 = timing.domLoading - timing.navigationStart;

// 内容加载完毕,即T3
const t3 = timing.loadEventEnd - timing.navigationStart;

// 重定向次数
const redirectCount = navigation && navigation.redirectCount;

// 跳转耗时
const redirect = timing.redirectEnd - timing.redirectStart;

// APP CACHE 耗时
const appcache = Math.max(timing.domainLookupStart - timing.fetchStart, 0);

更多属性说明可参看:https://segmentfault.com/a/1190000040912772

二、performance.getEntries()

window.performance.getEntries() 返回一个数组,数组的每个元素代表对应的静态资源的信息。

数组的第一个元素结果相当于:window.performance.getEntriesByType('navigation')

window.performance.getEntries() 执行结果:
在这里插入图片描述
window.performance.getEntriesByType(‘navigation’) 执行结果:
在这里插入图片描述
发现其实是一样的!

重要属性说明:

  • duration:资源的总耗时(包括等待时长,请求时长,响应时长 相当于responseEnd - startTime)
  • initiatorType:初始类型(注意这个类型并不准确,例如在css中的图片资源会这个值显示css,所以还是推荐用name中的后缀名)
  • name:资源的链接
  • transferSize: 转换后的文件大小(略大于encodedBodySize,这个值是和chrome的devtool Network里的size一致)

PS:了解更多可点击查看 使用 Performance API 获取页面性能 、参考文章

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql原理--InnoDB的表空间

1.概述 通过前边儿的内容大家知道, 表空间 是一个抽象的概念。 对于系统表空间来说,对应着文件系统中一个或多个实际文件;对于每个独立表空间来说,对应着文件系统中一个名为 表名.ibd 的实际文件。可以把表空间想象成被切分为许许…

navicat连接mysql报错过程以及解决

1.刚开始报错如下图 于是我利用这段报错信息(2059 - Authentication plugin caching sha2 password cannot be loaded)百度。 1.1上面报错的原因和解决过程 百度说是mysql的加密方式不对,如下图 所以这里进入数据库,修改mysql这…

【C++数据结构 | 哈希表速通】哈希表完成英汉词典增删改查 | 哈希表实现类型unordered_map详解

哈希表 by.Qin3Yu ps.本文的哈希表特指unordered_map实现类型 文中所有代码默认已使用std命名空间且已导入部分头文件&#xff1a; #include <iostream> #include <unordered_map> using namespace std;概念速览 什么是键值对&#xff1f; 所谓 键值对&#xf…

图扑物联 | WEB组态可视化软件

什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”等&#xff0c;是指通过人机开发界面&#xff0c;用类似“搭积木”的简单方式来搭建软件功能&a…

数据可视化---饼图、环形图、雷达图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

云服务器部署vue/node项目

此处以阿里云服务器为例&#xff0c;配置的是LNMP环境 vue部署云服务器&#xff1a; 以阿里云服务为例&#xff0c;端口自定义99 1、在 /usr/share/nginx/html/ 该目录下新建文件夹&#xff0c;该文件夹是部署的打好包的前端项目 例&#xff1a; 2、进入nginx目录配置相关配…

html+css+javascript实现渐隐轮播

实现效果&#xff1a; 图片自动轮播&#xff0c;点击左右按钮会操作图片向前或向后&#xff0c;图片与小圆点相互呼应&#xff0c;具有交互效果。 编写思想&#xff1a; 实现交互时使用了排他思想&#xff0c;同选项卡的功能&#xff1b; 自动轮播采用了setInterval()&#…

C++ summary 工具 Insights: 源码工具:应用篇 inline函数

介绍篇 在线执行 悬停&#xff0c;显示帮助 右键&#xff0c;查看文档 template example_1 int main(){int a 123;return 0; }(gdb) disas Dump of assembler code for function main():0x0000555555555129 <0>: endbr64 0x000055555555512d <4>: push …

2023年【陕西省安全员C证】新版试题及陕西省安全员C证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题参考答案及陕西省安全员C证考试试题解析是安全生产模拟考试一点通题库老师及陕西省安全员C证操作证已考过的学员汇总&#xff0c;相对有效帮助陕西省安全员C证复审模拟考试学员顺利通过考试。…

C#有望成为2023年的编程语言之王

前言 TIOBE 2023年12月编程语言指数头条新闻&#xff1a;C#有望成为2023年的编程语言之王。 TIOBE是什么&#xff1f; 访问地址&#xff1a;https://www.tiobe.com/tiobe-index/ TIOBE是一个编程社区指数&#xff0c;用于衡量不同编程语言的受欢迎程度。TIOBE指数基于全球范围…

接口自动化测试框架【AIM】

最近在做公司项目的自动化接口测试&#xff0c;在现有几个小框架的基础上&#xff0c;反复研究和实践&#xff0c;搭建了新的测试框架。利用业余时间&#xff0c;把框架总结了下来。 AIM框架介绍 AIM&#xff0c;是Automatic Interface Monitoring的简称&#xff0c;即自动化…

pytest之allure测试报告02:allure具体使用方法

一、allure包含的方法 二、allure使用教程 &#xff08;1&#xff09;用例中写入allure方法 allure.epic("数据进制项目epic") allure.feature("手机号模块feature") class TestMobile:allure.story("杭州的手机号story")allure.title("测…

桌面概率长按键盘无法连续输入问题

问题描述&#xff1a;概率性长按键盘无法连续输入文本 问题定位&#xff1a; 系统按键流程分析 图一 系统按键流程 按键是由X Server接收的&#xff0c;这一点只要明白了X Window的工作机制就不难理解了。X Server在接收到按键后&#xff0c;会转发到相应程序的窗口中。在窗…

单片机——通信协议(UART协议解析篇)

一、引言 在嵌入式系统设计中&#xff0c;UART通信是一种广泛使用的串行通信协议&#xff0c;它通过两条信号线实现全双工的数据传输和接收。UART通信协议以其简单、灵活和易于集成的特点&#xff0c;在嵌入式设备之间以及与外部设备进行通信时发挥着重要作用。本文将详细介绍U…

VS Code连接远程Linux服务器调试C程序

1.在 VS Code 上安装扩展 C/C 2.通过 VS Code 连接远程 Linux 服务器 3.通过 VS Code 在远程 Linux 服务器上安装扩展 C/C 4.打开远程 Linux 服务器上的文件夹 【注】本文以 /root/ 为例。 5.创建项目文件夹&#xff0c;并在项目文件夹下创建C程序 6.按 F5&#xff0c;选…

浅显易懂 @JsonIgnore 的作用

1.JsonIgnore作用   在json序列化/反序列化时将java bean中使用了该注解的属性忽略掉 2.这个注解可以用在类/属性上   例如&#xff1a;在返回user对象时&#xff0c;在pwd属性上使用这个注解&#xff0c;返回user对象时会直接去掉pwd这个字段&#xff0c;不管这个属性有没…

Linux Shell——(脚本参数传递)

脚本参数传递 一、参数传值二、脚本文件中特殊的变量 总结 最近学习了shell脚本&#xff0c;记录一下shell脚本参数传递相关语法 一、参数传值 执行脚本的时候&#xff0c;可以向脚本传递参数&#xff0c;脚本内获取参数的格式为$n n位置从1开始&#xff0c;$0 是脚本的文件名…

(代码详解)绘制气泡图+详细讲解图例设置+如何正确理解气泡图+气泡大小、颜色+调参

目录 气泡图简介&#xff1a; 一、导入库 二、准备数据 三、画气泡图--基础版 四、画气泡图--进阶版一 (控制气泡大小) 解读气泡图&#xff1a; 五、画气泡图--进阶版二(控制气泡颜色) (一)用参数c控制气泡颜色 (二)用for循环的方法控制气泡颜色 (三)给气泡分配指定的颜…

FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBuffer、跨域隔离、避坑...)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Kali Linux安装Xrdp远程桌面工具结合内网穿透实现远程访问Kali桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…