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

news2025/1/11 1:43:20

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.coloradmin.cn/o/561697.html

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

相关文章

作为IT行业过来人,我有4个重要建议给年轻程序员!

见字如面,我是军哥! 作为一名 40 岁的 IT 老兵,我在年轻时踩了不少坑,至少有两打,我总结了其中最重要的 4 个并一次性分享给你,文章不长,你一定要看完哈~ 1、重视基础还不够&#xf…

OpenAI Whisper + FFmpeg + TTS:动态实现跨语言视频音频翻译

本文作者系360奇舞团前端开发工程师 摘要: 本文介绍了如何结合 OpenAI Whisper、FFmpeg 和 TTS(Text-to-Speech)技术,以实现将视频翻译为其他语言并更换声音的过程。我们将探讨如何使用 OpenAI Whisper 进行语音识别和翻译&#x…

软件设计师 操作系统涉及题目

做题技巧 看有几个箭头就是有几个信号量。比如四个箭头就是S1 S2 S3 4把对应的信号量从小到大顺序放在对应箭头 比如P1-》P2就是 12 P1-》P3就是13 所以13大 注意是先V(S) 再P(S),箭头前是v后是p **P1没有前驱,第一个执行的进程.执行前用P操作 执行后用…

媒体传输协议的演进与未来

音视频应用近年来呈现出迅猛的发展趋势,成为互联网流量的主要载体,其玩法丰富,形态多样,众多繁杂的媒体传输协议也应运而生。LiveVideoStackCon 2022北京站邀请到快手传输算法负责人周超,结合快手在媒体传输上的优化与…

官宣!首个大模型兴趣小组开放申请,专注大模型应用落地

‍‍ 这里汇聚着大模型开发者与应用者 这是一个小而美小而精的兴趣组织 这是一个更关注大模型行业实际落地的组织 飞桨 AI Studio 大模型领域兴趣小组关注文心一言等大模型与开源模型应用落地,跟进最新技术趋势与应用方向,共同拓展技术视野、找寻商业化机…

QSS QTableWidget样式设置

QTableWidget的样式分为几个部分: 分别是: 外框:QTableWidget 表头:QHeaderView 表头字段:QHeaderView::section 表格:QTableWidget::item 选中的表格:QTableWidget::item::selected 水平滚动条…

chatgpt赋能Python-python_pensize

Python Pensize: How to Adjust Your Pen Size in Python If you’re new to Python, you might be struggling to master the art of the pen. Thankfully, Python Pensize is here to help. In this article, we’ll discuss how to adjust your pen size in Python so you …

快手广告怎么顺利度过冷启动期?

快手广告经常会出现这样的问题,投放初期新广告主、新产品、新账户都很难拿到曝光,没法突破;今天给大家介绍下什么是冷启动,如何快速有效的度过冷启动期。 冷启动就是刚开始启动的时候没有基础,模型需要根据历史情况来预…

Linux 查看或统计网卡流量的几种方式么?

在工作中,我们经常需要查看服务器的实时网卡流量。通常,我们会通过这几种方式查看Linux服务器的实时网卡流量。 目录 1、sar 2、 /proc/net/dev 3、ifstat 4、iftop 5、nload 6、iptraf-ng 7、nethogs 8、扩展 1、sar sar命令包含在sysstat工具…

大Op和小op的含义及理解

大Op和小op的含义及理解 Stochastic order notation(随机有序符号)6.1.1 O p O_p Op​和 o p o_p op​之间的关系6.2 符号速记及其算数性质6.3 为什么 o p o_p op​和 O p O_p Op​符号很有用?6.4例子:均值估计的相合性参考: Stochastic orde…

基于大模型GPT,如何提炼出优质的Prompt

基于大模型实现优质Prompt开发 1. 引言1.1 大规模预训练模型 2. Prompt开发2.1 Prompt基本定义:2.2 为什么优质Prompt才能生成优质的内容2.3 如何定义优质的Prompt 3. Prompt优化技巧3.1 迭代法3.1.1 创作评估3.1.2 基础创作3.1.3 多轮次交互 3.2 Trick法3.2.1 戴高…

【MySQL入门实战4】-发行版本及安装概述

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

python+django基于爬虫系统的世界历史时间轴历史事件大事记6ouj9

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

chatgpt赋能Python-python_pyuserinput

介绍 Python是一种极其流行的编程语言,可以用于多种任务,例如数据分析、机器学习、Web开发等等。 Python社区非常活跃,因此有许多模块和库可以用于各种任务,包括用户输入和自动化。 PyUserInput是一个Python库,它提供…

C#,码海拾贝(22)——线性方程组求解的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

小航编程题库机器人等级考试理论一级(2022年9月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题使用下列工具不能省力的是&#xff1f;&#xff08; &#xff09; A、斜面B、动滑轮C、定滑轮D…

深度学习笔记之循环神经网络(五)循环神经网络的反向传播过程

深度学习笔记之循环神经网络——循环神经网络的反向传播过程 引言回顾&#xff1a;循环神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关…

chatgpt赋能Python-python_pyzmq

Python和pyzmq&#xff1a;高效的分布式计算 Python是一种高级的、面向对象的编程语言&#xff0c;因其易学易用以及可扩展性而备受青睐。其中&#xff0c;用于消息传递和异步I/O操作的pyzmq库&#xff0c;使Python成为一个高效的分布式计算平台。 Pyzmq的概述 Pyyzmq是Pyth…

chatgpt赋能Python-python_peak

Python Peak - 程序员必备技能 Python Peak 指的是 Python 的高峰和巅峰。Python 是一种高级编程语言&#xff0c;已成为数据科学和软件开发领域中最流行的语言之一。在 Python Peak 中&#xff0c;程序员能够利用 Python 的最佳实践和工具&#xff0c;最大化地发挥出 Python …

Java——JDK1.8新特性

目录 一、Lambda 表达式 &#xff08;一&#xff09;Lambda 表达式语法 &#xff08;二&#xff09;类型推断 二、函数式接口 &#xff08;一&#xff09;自定义函数式接口 &#xff08;二&#xff09;作为参数传递Lambda 表达式 &#xff08;三&#xff09;Java 内置四…