【JS】1691- 重学 JavaScript API - Performance API

news/2024/11/8 17:40:33/

e1f905627fb083afa72aea2e8a772056.jpeg

前期回顾:

1. Page Visibility API

2. Broadcast Channel API

3. Beacon API

4. Resize Observer API

5. Clipboard API

6. Fetch API

🏝 1. 什么是 Performance API

1.1 概念介绍

Performance API 提供了「访问和测量浏览器性能相关信息」的方法。通过 Performance API,开发人员可以获取关于「页面加载时间」「资源加载性能」「用户交互延迟」等方面的详细信息,以便进行性能分析和优化。

1.2 作用和使用场景

Performance API 的作用在于帮助开发人员定位和解决性能问题,优化网页加载速度和用户体验。它可以用于以下场景:

  • 「网页性能监测」

测量和分析页面加载时间、资源加载性能、关键渲染路径等指标,了解网页性能瓶颈。

  • 「性能优化」

识别潜在的性能问题,采取相应的优化措施,提高网页加载速度和响应性能。

  • 「用户体验分析」

通过测量用户交互延迟和动画性能,评估网页的用户体验质量。

  • 「性能基准测试」

比较不同版本或不同配置下的性能差异,评估性能改进效果。

🎨 2. 如何使用

Performance API 提供了一组方法和属性,用于获取和测量性能相关信息。以下是一些常用的使用示例:

  • 「获取页面加载时间」

const loadTime =window.performance.timing.loadEventEnd -window.performance.timing.navigationStart;console.log(`页面加载时间:${loadTime}ms`);
  • 「测量资源加载时间」

const resourceTiming = window.performance.getEntriesByType("resource");
resourceTiming.forEach((resource) => {console.log(`${resource.name} 的加载时间:${resource.duration}ms`);
});
  • 「监测用户交互延迟」

const interactionStart = Date.now();
document.addEventListener("click", () => {const interactionEnd = Date.now();const interactionDelay = interactionEnd - interactionStart;console.log(`用户点击延迟:${interactionDelay}ms`);
});

请注意,这些代码只是示例,实际使用时可能需要「根据具体需求和浏览器兼容性进行适当的处理和兼容性检测」

🧭 3. 实际应用

Performance API 可以应用于许多场景和优化方案,下面是几个常见的示例:

3.1 网页加载时间监测和优化

通过 Performance API,我们可以监测页面的加载时间并进行优化。下面是一个示例代码,用于监测页面加载时间和资源加载时间:

// 监测页面加载时间
const loadTime =window.performance.timing.loadEventEnd -window.performance.timing.navigationStart;console.log(`页面加载时间:${loadTime}ms`);// 监测资源加载时间
const resourceTiming = window.performance.getEntriesByType("resource");
resourceTiming.forEach((resource) => {console.log(`${resource.name} 的加载时间:${resource.duration}ms`);
});

通过获取 window.performance.timing 对象中的时间戳,我们可以计算出页面的加载时间。另外,通过 window.performance.getEntriesByType('resource') 方法,我们可以获取到所有资源的加载性能信息,进一步优化资源加载。

3.2 资源加载性能分析

对于网页中的关键资源,我们通常需要关注它们的加载时间,以便进行性能优化。通过 Performance API,我们可以监测和分析关键资源的加载性能。下面是一个示例代码,用于监测指定关键资源的加载时间:

// 监测关键资源的加载时间
const keyResources = ["https://example.com/css/style.css","https://example.com/js/main.js",
];
keyResources.forEach((resource) => {const resourceEntry = window.performance.getEntriesByName(resource)[0];console.log(`${resource} 的加载时间:${resourceEntry.duration}ms`);
});

通过使用 window.performance.getEntriesByName() 方法,我们可以获取特定资源的加载性能信息,进而分析和优化关键资源的加载时间。

3.3 用户交互延迟监测

用户体验是网页开发中至关重要的因素之一。Performance API 可以帮助我们监测用户与网页的交互延迟,以便进行优化。下面是一个示例代码,用于监测用户点击延迟:

// 监测用户点击延迟
const interactionStart = Date.now();
document.addEventListener("click", () => {const interactionEnd = Date.now();const interactionDelay = interactionEnd - interactionStart;console.log(`用户点击延迟:${interactionDelay}ms`);
});

通过记录用户交互的起始时间和结束时间,我们可以计算出用户点击的延迟时间,帮助我们评估和改善用户体验。

3.4 页面动画性能监测

在网页中使用动画可以增强用户体验,但不合理的动画实现可能导致性能问题。通过 Performance API,我们可以监测页面动画的性能,以便进行优化。下面是一个示例代码,用于监测动画执行时间:

// 监测动画性能
function measureAnimationPerformance() {const animationStart = performance.now();// 执行动画操作requestAnimationFrame(() => {const animationEnd = performance.now();const animationDuration = animationEnd - animationStart;console.log(`动画执行时间:${animationDuration}ms`);});
}measureAnimationPerformance();

在这个示例中,我们使用 performance.now() 方法获取动画的起始时间和结束时间,并计算出动画的执行时间。通过监测动画性能,我们可以判断动画是否流畅,是否占用过多的资源,从而进行优化和改进。

📋 4. 兼容性和优缺点

4.1 兼容性

以下是 Performance API 在不同浏览器上的兼容性情况:

  • Chrome 6+ ✅

  • Firefox 7+ ✅

  • Safari 8+ ✅

  • Edge 12+ ✅

  • Internet Explorer: 部分支持,支持 IE 9+

建议在实际开发中,根据目标用户的浏览器使用情况进行兼容性测试,并根据需要提供备用方案或使用 polyfill 来填补兼容性差异。

c105a081dfebc2e60eb691b4aaeb2a81.png

详细兼容性信息,请访问 Can I use[1]

4.2 优缺点

Performance API 具有以下优点和缺点:

优点:

  • 提供了「丰富的性能指标和测量方法」,能够全面评估网页的性能表现。

  • 支持获取页面加载时间、资源加载性能、用户交互延迟等关键指标,帮助开发人员定位和解决性能问题。

  • 能够进行性能优化和用户体验分析,「提高网页的加载速度和响应性能」

缺点:

  • 在某些情况下,获取性能指标可能会对网页性能产生一定影响,需要谨慎使用。

  • 在一些旧版本的浏览器中可能不被支持,「需要进行兼容性处理或使用替代方案」

  • 部分指标的精确性可能受到浏览器实现和设备性能的限制,需要进行综合考虑和验证。

在使用时,需要结合实际需求和兼容性要求进行合理的使用和处理。

4.3 工具推荐

推荐几个基于 Performance API 封装的第三方库:

  1. Web Vitals[2]:6.1K⭐

一个用于测量和监控核心网页性能指标的库,基于 Performance API,包括 Largest Contentful Paint (LCP)、First Input Delay (FID)、Cumulative Layout Shift (CLS) 等指标。

  1. Perfume.js[3]:2.8K⭐

一个小巧而强大的性能度量库,可用于监测页面加载时间、关键资源加载时间和用户交互延迟。

  1. PerformanceNow.js[4]:100⭐

一个小巧的性能计时库,基于 Performance API 的高分辨率时间戳,提供更准确的性能测量功能。

这些库都是在 Performance API 的基础上进行封装和扩展,提供了更便捷的接口和功能,帮助开发者更好地监测和优化网页性能。我们可以根据具体需求选择适合的库来简化性能监测和分析的工作。

👍 5. 使用建议和注意事项

总结了几个 Performance API 的使用建议和注意事项:

  1. 在测量性能时,应该选择合适的时机和目标,避免对页面性能造成额外的负担。

  2. 注意兼容性问题,根据目标浏览器进行兼容性测试和处理,考虑使用 polyfill 或替代方案。

  3. 结合其他工具和方法,如浏览器开发者工具、性能分析工具等,综合分析和优化网页的性能。

  4. 了解不同指标的含义和解释,避免误解或错误地解读性能数据。

  5. 使用性能数据进行有针对性的优化,优先解决影响用户体验的瓶颈。

  6. 随着浏览器的更新和标准的发展,关注 Performance API 的最新变化和功能增强。

🍭 6. 总结

Performance API 是一个重要的 JavaScript API,用于访问和测量浏览器性能相关信息。它提供了丰富的性能指标和测量方法,帮助开发人员定位和解决性能问题,优化网页加载速度和用户体验。通过 Performance API,可以获取页面加载时间、资源加载性能、用户交互延迟等关键指标,进行性能分析和优化。

🎯 7. 拓展学习

如果你对 Performance API 感兴趣,可以参考以下资料进行拓展学习:

  • MDN web docs - Performance API[5]

  • Google Developers - Assessing Loading Performance in Real Life with Navigation and Resource Timing[6]

希望这篇文章对你理解和使用 Performance API 有所帮助。如有任何问题,请随时提问。

Reference

[1]

Can I use: https://caniuse.com/?search=Performance%20API

[2]

Web Vitals: https://github.com/GoogleChrome/web-vitals

[3]

Perfume.js: https://github.com/Zizzamia/perfume.js

[4]

PerformanceNow.js: https://github.com/myrne/performance-now

[5]

MDN web docs - Performance API: https://developer.mozilla.org/en-US/docs/Web/API/Performance

[6]

Google Developers - Assessing Loading Performance in Real Life with Navigation and Resource Timing: https://developers.google.com/web/fundamentals/performance/navigation-and-resource-timing

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

68c7ca52510e5e4e79fcc59e3098f889.gif

回复“加群”,一起学习进步


http://www.ppmy.cn/news/77135.html

相关文章

mmdetection3d框架安装与Demo模型运行--基于Ubuntu18.04+Cuda10.1

1.NVIDIA Driver和Cuda安装 在Ubuntu18.04机器上安装好NVIDIA Driver4.18和CUDA10.1,版本号分别为4.18和10.1 查看NVIDIA Driver版本号:nvidia-smi 查看CUDA版本号:nvcc -V 2.安装MiniConda,并创建和管理虚拟环境 2.1 安装Min…

从零实现一个数据库(DataBase) Go语言实现版 5.B树实现(Part2))

英文源地址 紧接着上一篇进行b树的实现. b树中删除操作 删除叶子节点 从叶子节点中删除一个key的代码很像其他nodeReplace*函数 func leafDelete(new BNode, old BNode, idx uint16) {new.setHeader(BNODE_LEAF, old.nkeys() - 1)nodeAppendRange(new, old, 0, 0, idx)node…

2023年25个Java8面试问题和答案

Java是一种非常流行的编程语言,从Android应用程序到物联网(IoT)无处不在。事实上,根据Codeplatoon的数据,Java在1年的招聘信息中排名#2022。考虑到它的普遍存在,对精通Java的专业人员的需求仍然很高也就不足…

【投毒情报】PyPI中 colorara 等组件包泄漏主机截屏等敏感信息

漏洞描述 PyPI仓库中受影响版本的 colorara 和 libida组件在安装过程中会根据不同操作系统分别执行恶意逻辑,针对Windows执行White Snake远控木马,针对Linux收集系统截屏、主机名、用户名、IP等主机敏感信息发送至telegram。 漏洞名称PyPI中 colorara …

Vue 中动态引入图片为什么要是 require

在vue中动态的引入图片为什么要使用require? 因为动态添加src被当做静态资源处理了,没有进行编译,所以要加上require, 我倒着都能背出来...... emmm... 乍一看好像说的很有道理啊,但是仔细一看,这句话说…

AntDB数据库参加开源数据库技术沙龙,分享全栈业务能力

5月12日,由PostgreSQL中文社区和PolarDB开源数据库举办的开源数据库技术沙龙温州站于温州大学举办。此次活动邀请了众多数据库领域的专家和技术大咖,旨在促进数据库与温州产业界和学术界的交融发展与合作,共同探讨数据库产业未来的发展趋势&a…

Java中六种关联查询

六种关联查询 交叉连接(CROSS JOIN) 内连接(INNER JOIN) 外连接(LEFT JOIN/RIGHT JOIN) 联合查询(UNION与UNION ALL) 全连接(FULL JOIN) 交叉连接…

如何利用弹性伸缩服务降低80%的机器成本

一、引言 弹性伸缩服务是一种应用在云计算平台上的技术,能够自动根据工作负载和业务需求来调整资源,从而达到优化成本和提高资源利用率的目的。本文将分享一些在实际操作中使用弹性伸缩服务的技巧,并探讨其在企业中的应用效果和价值。 二、概…