前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录

    • ⭐前言
      • 💖vue3系列文章
    • ⭐Performance api计算持续时间
      • 💖 mark用法
      • 💖 measure用法
    • ⭐计算echarts渲染的持续时间
    • ⭐结束

yma16-logo

⭐前言

大家好,我是yma16,本文分享关于 前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间。
Performance API

浏览器的Performance API 是一组用于测量和监视网页性能的接口。它提供了一些方法和事件,可以用于收集和分析页面的性能数据。

💖vue3系列文章

vue3 + fastapi 实现选择目录所有文件自定义上传到服务器
前端vue2、vue3去掉url路由“ # ”号——nginx配置
csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板
认识vite_vue3 初始化项目到打包
python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示
让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容
前端vue3——html2canvas给网站截图生成宣传海报
vue3+echarts可视化——记录我的2023编程之旅
前端vite+vue3——自动化配置路由布局
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
前端vite+rollup前端监控初始化——封装基础fmp消耗时间的npm包并且发布npm beta版本

⭐Performance api计算持续时间

计算单位:毫秒,使用performance.now()为参考。
performance.now用于精确测量代码执行时间的高精度时钟。该方法返回从性能开始计算的时间戳,以毫秒为单位。

💖 mark用法

mark() 方法在浏览器的性能缓冲区中使用给定名称添加一个timestamp(时间戳) 。

应用定义的时间戳可以通过 Performance 接口的一个 getEntries*() 方法 (getEntries(), getEntriesByName() 或者 getEntriesByType()) 检索到。

标记 的 performance entry将具有以下属性值:

  • entryType - 设置为 “mark”.
  • name - 设置为 mark 被创建时给出的 “name”。
  • startTime - 设置为 mark() 方法被调用时的 timestamp 。
  • duration - 设置为 “0” (标记没有持续时间).

如果这个方法被指定的 name 已经存在于PerformanceTiming 接口,会抛出一个SyntaxError错误。

用法

performance.mark(name,{detail:detailOption});

示例

// 创建一些标记。
performance.mark("start");
performance.mark("end");
performance.mark("monkey");
performance.mark("monkey");
performance.mark("dog");
performance.mark("dog");// 获取所有的 PerformanceMark 条目。
const allEntries = performance.getEntriesByType("mark");
console.log(allEntries.length);
// 6// 获取所有的 "monkey" PerformanceMark 条目。
const monkeyEntries = performance.getEntriesByName("monkey");
console.log(monkeyEntries.length);
// 2

定义detailOption配置项

performance.mark('csdn-page',{detail:{user:'yma16'}})
const monkeyEntries = performance.getEntriesByName("csdn-page");
console.log(monkeyEntries);

运行结果:

[{"detail":{"user": "yma16"},"name": "csdn-page","entryType": "mark","startTime": 1506139.5,"duration": 0}
]

💖 measure用法

measure() 方法在浏览器性能记录缓存中创建了一个名为时间戳的记录来记录两个特殊标志位(通常称为开始标志和结束标志)。被命名的时间戳称为一次测量(measure)。

前提是存在mark标记的startMark和endMark
语法如下

performance.measure(name, startMark, endMark);

自定义开始结束的用法
自定义detail对象,start的开始时间,end的结束时间,得到end-start的duration

performance.measure(name, {detail: detailOptions,start: startTime,end: endTime,
});

常规用法示例示例

performance.mark('test-start')
performance.mark('test-end')
performance.measure('test-duration','test-start','test-end')

得到结果

{"detail":null,"name": "test-duration","entryType": "measure","startTime": 2160161.5,"duration": 0
}

自定义measure示例

performance.measure('custom-measure', {detail: {'user':'yma16'},start: 100,end: 150,
});

运行结果

{detail: {'user':'yma16'},"name": "custom-measure","entryType": "measure","startTime": 100,"duration": 50
}

⭐计算echarts渲染的持续时间

渲染echarts逻辑如下

function renderEchartBar() {// 基于准备好的dom,初始化echarts实例const domInstance = document.getElementById('barChartId')if (domInstance) {domInstance.removeAttribute('_echarts_instance_')}else {return}const myChart = echarts.init(domInstance);const option = {backgroundColor: 'rgba(0,0,0,0)',//背景色title: {text: '中国地图',subtext: 'china',color: '#fff'},visualMap: { // 设置视觉映射min: 0,max: 20,text: ['最高', '最低'],realtime: true,calculable: true,inRange: {color: ['lightskyblue', 'yellow', 'orangered']}},geo: {// 经纬度中心// center: state.centerLoction,type: 'map',map: 'chinaJson', // 这里的值要和上面registerMap的第一个参数一致roam: false, // 拖拽nameProperty: 'name',geoIndex: 1,aspectScale: 0.75, // 长宽比, 默认值 0.75// 悬浮标签label: {type: 'map',map: 'chinaJson', // 这里的值要和上面registerMap的第一个参数一致// roam: false, // 拖拽// nameProperty: 'name',show: true,color: '#333',formatter: function (params) {return params.name},// backgroundColor: '#546de5',align: 'center',fontSize: 10,width: (function () {// let n = parseInt(Math.random() * 10)return 110})(),height: 50,shadowColor: 'rgba(0,0,0,.7)',borderRadius: 10},zoom: 1.2},tooltip: {show: true,position: ['10%', '10%'],formatter: (params) => {const { name } = params.dataconst filterData = filterMapName(name)let isTruthCount = 0const strInfo = filterData.map(item => {if (item.status === '有效') {isTruthCount++}return `<img src=${item.imgSrc} width='20' height='20'/>&nbsp; ${item.name}&nbsp;(${item.status})`}).join('<br>')state.provinceIsTruthCount = isTruthCountconst value = filterData.lengthreturn `地区:${name}<br>报名总人数:${value} <br>有效报名人数:${isTruthCount}<br>人员信息:<br>${strInfo}`}},series: [// 坐标点的热力数据{data: state.airData,geoIndex: 0, // 将热力的数据和第0个geo配置关联在一起type: 'map',roam: false,itemStyle: {normal: {areaColor: "rgba(0, 0, 0, 0)",borderWidth: 8, //设置外层边框borderColor: "rgba(135,235, 45, 1)",shadowColor: "rgba(135,235, 45, 1)",shadowBlur: 40, //地图外层光晕},},},{type: 'effectScatter',// 渲染显示zlevel: 3,showEffectOn: 'render',data: state.locationGis, // 配置散点的坐标数据coordinateSystem: 'geo', // 指明散点使用的坐标系统rippleEffect: {// 缩放scale: 4,// 涟漪的颜色color: '#cf6a87',// 波纹数量number: 2,// 扩散方式 stroke(线条) fill(区域覆盖)brushType: 'fill'},// 形状symbol: 'circle'},],}console.log('option', option)// 使用刚指定的配置项和数据显示图表。myChart.setOption(option, true);// 监听state.echartInstance = myChart;myChart.on('click', function (params) {console.log('params', params)filterName(params.name)});window.onresize = myChart.resize;
}

在开始时刻添加标记

performance.mark('render-echart-start')

在结束时刻添加标记,然后调用measure获取最近一次标记的持续时间

performance.mark('render-echart-end')
const measure=performance.measure('render-echart-duration','render-echart-start','render-echart-end')
const duration=measure.duration

计算地图渲染的效果,耗时 137ms
render map
vue3demo inscode项目

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!
future city

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!

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

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

相关文章

Java网络编程之TCP协议核心机制(一)

目录 题外话 正题 TCP协议核心机制 1.确认应答机制 2.超时重传 3.连接管理 三次握手(建立数据连接)和四次挥手(断开连接) 三次握手 三次握手的意义 为什么不能是四次挥手和两次挥手呢??? 四次挥手(断开连接) 四次挥手的意义 四次挥手能变为三次挥手吗? 小结 题…

string功能介绍(普及版)

目录 1。初始化&#xff08;好几种方式&#xff09;&#xff0c;npos和string的使用说明 2。string的拷贝&#xff0c;隐式类型转换&#xff0c;[]&#xff0c;size&#xff0c;iterator&#xff0c;begin&#xff0c;end&#xff0c;reverse&#xff0c;reverse_iterator&am…

基于springboot实现的家具销售电商平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

DELL服务器配置ILO(idrac)地址、修改管理员密码

服务器型号&#xff1a;DELL PowerEdge R630 1、重启服务器选择F2进入BIOS 2、重启服务器选择F2进入BIOS 3、选择“Network” 4、配置iDRAC的IP&#xff0c;掩码网关&#xff0c;DNS等信息 5、Esc返回&#xff0c;下滑选择“User Configuration” 6、配置iDRAC的用户名密码以及…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

WD—C++课前作业—30题

怎么会手和脚都在桌子上 目录 31&#xff0c;声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化&#xff0c;成员函数 void reverse()实现 head 内字符串的逆序存放&#xff0c;成员函数 void print()实现 head 内字符串的输出。…

01基础篇

1、初识 JVM 1.1 什么是 JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。使用…

Python轻量级Web框架Flask(14)—— 自己做Flask项目总结

0、前言&#xff1a; 本文意在记录自己在做毕业Flask项目开发时遇到的一些问题&#xff0c;并将问题解决方案记录下来&#xff0c;可做日后查询本文也会记录自己做FLask项目时实现的一些功能&#xff0c;作为开发工作的进程记录注意&#xff1a;用Flask开发的前提是已经设计好…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

常类API(Math,System,Runtime)

1、Math 是帮助我们用于进行数学计算的工具类私有化构造方法&#xff0c;所有的方法都是静态的 方法名 说明public static int abs(int a) 获取参数绝对值 public static double ceil(int a)向上取整public static double floor(int a)向下取…

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教学辅助平台的主要使用者分…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30&#xff1a;0P34&#xff1a;1然后高流向低&#xff0c;P34&#xff1a;0&#xff0c;刚开始是0xf0&#xff1a;1111 0000 后面是0xe0&#xff1a;1110 0000 &#xff0c;当是0xe0能确…

MySQL用SQL取三列中最大的数据值

1、有如下数据&#xff1a; ABC000097.0600330.72330.720069.650027.8827.85086.92086.92219.42219.4219.41 需要展示为如下形式&#xff1a; ABC结果列0000097.06097.060330.72330.72330.7200669.65009.6527.8827.85027.8886.92086.9286.92219.42219.4219.41219.42 解决办…

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关&#xff1f; 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…