深入了解Performance API:优化网页性能的利器

在现代Web开发中,优化网页性能是至关重要的。用户对于加载速度和交互性能的要求越来越高,而Performance API作为一组用于测量和监控网页性能的JavaScript接口,为开发者提供了丰富的工具和信息。本文将深入探讨Performance API的各个方面,帮助读者更好地理解和利用这一强大工具来优化网页性能。

Performance API简介

  • Performance API是什么?

    衡量和分析各种性能指标对于确保 web 应用的速度非常重要。Performance API 提供了重要的内置指标,并能够将你自己的测量结果添加到浏览器的性能时间线(performance timeline)中。性能时间线使用高精度的时间戳,且可以在开发者工具中显示。你还可以将相关数据发送到用于分析的端点,以根据时间记录性能指标。

  • Performance API的作用和优势

    • 1. 提供详细的性能信息:Performance API不仅提供了页面加载时间等基本信息,还提供了更详细的性能数据,如各个阶段的开始和结束时间、资源加载时间、事件处理时间等。这些详细信息可以帮助开发者更准确地分析和定位性能问题。

    • 2. 支持多种性能指标:Performance API支持多种常用的性能指标,如页面加载时间、资源加载时间、重定向次数、DNS解析耗时等。这些指标可以帮助开发者全面评估网页的性能,并进行有针对性的优化。

    • 3. 可以与其他API集成:Performance API可以与其他API集成使用,如Navigation Timing API、Resource Timing API等。通过结合使用不同的API,开发者可以获取更全面和准确的性能数据,并进行更深入的分析和优化。

    • 4. 提升用户体验:通过使用Performance API来优化网页性能,可以提升用户的体验。快速加载的网页可以减少用户等待时间,流畅的交互性能可以提高用户的操作体验,从而增加用户的满意度和留存率。

window.performance

performance.timing字段介绍

navigationStart初始化页面,在同一个浏览器上下文中前一个页面unload的时间戳,如果没有前一个页面的unload,则与fetchStart值相等
redirectStart第一个HTTP重定向发生的时间,有跳转且是同域的重定向,否则为0
redirectEnd最后一个重定向完成时的时间,否则为0
fetchStart浏览器准备好使用http请求获取文档的时间,这发生在检查缓存之前
domainLookupStartDNS域名开始查询的时间,如果有本地的缓存或keep-alive则时间为0
domainLookupEndDNS域名结束查询的时间
connectStartTCP开始建立连接的时间,如果是持久连接,则与fetchStart值相等
secureConnectionStarthttps 连接开始的时间,如果不是安全连接则为0
connectEndTCP完成握手的时间,如果是持久连接则与fetchStart值相等
requestStartHTTP请求读取真实文档开始的时间,包括从本地缓存读取
requestEndHTTP请求读取真实文档结束的时间,包括从本地缓存读取
responseStart返回浏览器从服务器收到(或从本地缓存读取)第一个字节时的Unix毫秒时间戳
responseEnd返回浏览器从服务器收到(或从本地缓存读取,或从本地资源读取)最后一个字节时的Unix毫秒时间戳
unloadEventStart前一个页面的unload的时间戳 如果没有则为0
unloadEventEnd与unloadEventStart相对应,返回的是unload函数执行完成的时间戳
domLoading返回当前网页DOM结构开始解析时的时间戳,此时document.readyState变成loading,并将抛出readyStateChange事件
domInteractive返回当前网页DOM结构结束解析、开始加载内嵌资源时时间戳,document.readyState 变成interactive,并将抛出readyStateChange事件(注意只是DOM树解析完成,这时候并没有开始加载网页内的资源)
domContentLoadedEventStart网页domContentLoaded事件发生的时间
domContentLoadedEventEnd网页domContentLoaded事件脚本执行完毕的时间,domReady的时间
domCompleteDOM树解析完成,且资源也准备就绪的时间,document.readyState变成complete.并将抛出readystatechange事件
loadEventStartload 事件发送给文档,也即load回调函数开始执行的时间
loadEventEndload回调函数执行完成的时间

1. Performance接口

  • 获取页面加载时间
  • 获取页面资源加载时间

使用示例:

// 获取页面加载时间
const loadTime = window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;
console.log('页面加载时间:', loadTime);

// 获取资源加载时间
const resources = window.performance.getEntriesByType('resource');
resources.forEach(resource => {
  console.log('资源URL:', resource.name);
  console.log('资源加载时间:', resource.duration);
});

2. PerformanceTiming接口

PerformanceTiming接口提供了更详细的页面加载时间信息,包括各个阶段的开始和结束时间。它是Performance API中用于测量页面性能的重要接口。

  • 获取重定向耗时
  • 获取DNS解析耗时
  • 获取TCP连接耗时

使用示例:

const timing = window.performance.timing;
const redirectTime = timing.redirectEnd - timing.redirectStart;
const dnsTime = timing.domainLookupEnd - timing.domainLookupStart;
const tcpTime = timing.connectEnd - timing.connectStart;

console.log('重定向耗时:', redirectTime);
console.log('DNS解析耗时:', dnsTime);
console.log('TCP连接耗时:', tcpTime);

3. PerformanceNavigation接口

PerformanceNavigation接口提供了有关页面导航的信息,如重定向次数、是否通过缓存加载等。它可以帮助开发者了解页面导航过程中的性能指标。

使用示例:

const navigation = window.performance.navigation;
console.log('重定向次数:', navigation.redirectCount);
console.log('是否通过缓存加载:', navigation.type === 1 ? '是' : '否');

4. PerformanceEntry接口

PerformanceEntry接口提供了有关特定资源或事件的详细性能信息,如资源加载时间、事件处理时间等。它可以用于监控和分析特定资源或事件的性能。

使用示例:

// 监控资源加载性能
window.performance.getEntriesByType('resource').forEach(entry => {
  console.log('资源URL:', entry.name);
  console.log('资源加载时间:', entry.duration);
  console.log('资源大小:', entry.transferSize);
});

// 监控事件处理性能
window.performance.getEntriesByType('event').forEach(entry => {
  console.log('事件类型:', entry.name);
  console.log('事件处理时间:', entry.duration);
});

这些示例展示了Performance API中各个接口的基本用法,开发者可以根据具体需求使用不同的接口来获取更详细和准确的性能信息,并进行相应的优化和分析。

实际应用场景

1. 如何利用Performance API优化网页加载速度
  • 使用Performance API获取页面加载时间,找出加载时间较长的资源,并进行优化。
 
const loadTime = window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;
console.log('页面加载时间:', loadTime);

const resources = window.performance.getEntriesByType('resource');
resources.forEach(resource => {
  if (resource.duration > 1000) {
    console.log('加载时间较长的资源:', resource.name);
    // 进行相应的优化,如压缩、缓存等
  }
});

  • 使用Performance API监控资源加载性能,找出加载时间较长的资源,并进行优化。
window.performance.getEntriesByType('resource').forEach(entry => {
  if (entry.duration > 1000) {
    console.log('加载时间较长的资源:', entry.name);
    // 进行相应的优化,如压缩、缓存等
  }
});

2. 如何利用Performance API监控用户交互性能:
  • 监控用户点击按钮的交互性能。
 
document.querySelector('#myButton').addEventListener('click', function(event) {
  const interactionTime = window.performance.now() - event.timeStamp;
  console.log('用户点击交互时间:', interactionTime);
});

  • 监控用户滚动页面的交互性能。
document.addEventListener('scroll', function(event) {
  const interactionTime = window.performance.now() - event.timeStamp;
  console.log('用户滚动交互时间:', interactionTime);
});

通过使用Performance API,开发者可以获取页面加载时间和资源加载性能,从而找出加载时间较长的资源并进行优化。同时,通过监控用户交互性能,开发者可以了解用户与网页的交互体验,并进行相应的优化。这些实际应用场景和示例代码可以帮助开发者更好地利用Performance API来优化网页性能。

总结

通过深入了解Performance API,我们可以更好地理解和利用这一强大工具来优化网页性能。无论是通过获取页面加载时间、监控资源加载性能还是监控用户交互性能,Performance API都为开发者提供了丰富的信息和工具。随着Web技术的不断发展,我们可以期待Performance API在未来的进一步改进和应用中发挥更大的作用,为用户提供更好的网页体验。

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

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

相关文章

2021年09月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行下图所示程序,舞台上的角色? A:在1秒内滑行到随机位置 B:不断地重复滑行到随机位置 C:只有按下空格键的时候,才会滑行到随机位置 D:只有按下空格键以外键的时候,才会滑行…

SpringMVC问题

文章目录 SpringMVC运行流程MVC的概念与请求在MVC中的执行路径,ResponsBody注解的用途SpringMVC启动流程 SpringMVC运行流程 • 客户端(浏览器)发送请求,直接请求到 DispatcherServlet 。 • DispatcherServlet 根据请求信息调用 …

vscode-insiders Remote-SSH XHR failed无法访问远程服务器

问题概述: destFolder/home/apple/.vscode-server-insiders > destFolder2/vscode-cli-05cd2640ec8a106a4ee99cb38e6ee34fbec04f11.tar.gz > 194f252f7426:trigger_server_download_end > Waiting for client to transfer server archive... > W…

C语言好好题(一维数组)

两天没有更新了,贴纸们,有没有想我呀。😄😄😄 好了,就寒暄到这里吧,下面请看题: 有序序列判断 输入一个整数序列,判断是否是有序序列,有序,指序列…

Postman如何使用(一):导入导出和发送请求查看响应

一、Postman如何导入导出打包的应用 在Postman中导入导出我们的 测试数据包 和 工作环境 非常的方便: 导出数据包的方法如下: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程…

10年开发工程师总结,8大主流程序员兼职平台,月入30k不是梦!

今年互联网行业陆续裁员减薪,许多人怨声载道的同时也开始另谋出路。而对于程序员更是应该提早做好准备,活跃在兼职接单的最前沿。 我们程序员是一门技术工种,与互联网其他行业相比薪水会相对高一点,不过钱也不是那么好赚的&#…

2023-11-21 LeetCode每日一题(美化数组的最少删除数)

2023-11-21每日一题 一、题目编号 2216. 美化数组的最少删除数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 : nums.length 为偶数对所有满…

腾讯三季度财报解读:AI大模型成下个十年的新支点?

2023年,腾讯重回高增长轨道。 近日,腾讯披露了2023年第三季度财报,营收1546.25亿元,同比增长10%;非国际通用会计准则下的净利润为449.21亿元,同比增长39%。此前两个季度,腾讯的营收、净利润增速…

【西行纪年番】孙悟空对战阴界王,素衣奄奄一息,巨灵拳霸气一击

Hello,小伙伴们,我是拾荒君。 《西行纪年番》第20集已更新。为了救回素衣,孙悟空想尽办法,最后他拜托沙悟净帮忙,终于成功把自己传送到阴界。原来,素衣的魂魄被阴界王藏在了他制造的人偶之中。沙悟净提醒孙悟空必须在…

【LeetCode二叉树进阶题目】606,102,107

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号…

一次解决套接字操作超时错误的过程

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 在windows客户端使用QTcpSocket连接一个ubuntu服务端程序,出现套接字操作超时的错误。开始感觉还莫名其妙的,因为之前连接都是好好…

基于springboot实现“漫画之家”系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现“漫画之家”系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&am…

假期对企业邮箱的维护和管理策略

假期应该对企业邮箱做些什么?放假后对企业邮箱的自动回复设置将在这里单独列出。自动回复是你与新老客户沟通的桥梁。告诉老客户你放假了,但你会花时间回复他。还告诉新客户(新询价客户)你在假期不能及时回复他,他们会…

2021年12月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 舞台上有3个角色,小猫的程序如下图所示,另外两个角色没有程序。点击绿旗,下列选项正确的是? A:小猫随鼠标移动,可能会遮挡其他两个角色 B:小猫随鼠标移动,可能会被其他两个…

范围查询 range级别 继续优化思路

问题&#xff1a; 这几天工作遇到了一个问题。千万级别的表&#xff0c;每秒钟产生很多数据&#xff0c;select count(id) from table where flag 1 and create_time < 2023.11.07;分区表&#xff0c;range级别&#xff0c;已经是走create_time列上的索引&#xff0c;flag…

印刷企业实施WMS仓储管理系统需要哪些硬件设施

随着科技的快速发展&#xff0c;印刷企业的运营模式也正在经历着变革。为了提升效率&#xff0c;降低成本&#xff0c;并实现精细化管理&#xff0c;越来越多的印刷企业开始引入WMS仓储管理系统解决方案。然而&#xff0c;要成功实施这样的系统&#xff0c;必要的硬件设施是不可…

【Redis】持久化-RDBAOF混合持久化

文章目录 前置知识RDB&#xff08;定期备份&#xff09;触发机制流程说明RDB文件的处理RDB 的优缺点 AOF&#xff08;实时备份&#xff09;使用AOF命令写入AOF工作流程文件同步重写机制重写触发机制AOF进制重写流程 混合持久化启动时数据恢复 总结 前置知识 回顾MySQL MySQL的事…

upload-labs关卡12(基于白名单的%00截断绕过)通关思路

文章目录 前言一、靶场需要了解的前置知识1、%00截断2、0x00截断3、00截断的使用条件1、php版本小于5.3.292、magic_quotes_gpc Off 二、靶场第十二关通关思路1、看源代码2、bp抓包%00截断3、验证文件是否上传成功 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&…

山西电力市场日前价格预测【2023-11-23】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-23&#xff09;山西电力市场全天平均日前电价为148.77元/MWh。其中&#xff0c;最高日前电价为420.40元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

谷歌开发者账号登录提示“存在异常活动”的原因及解决方法

相信很多开发者在登录谷歌开发者账号时遇到过这样的情况&#xff1a;“Verify your identity” “Weve detected unusual activity on the accountyoure trying to access. To continue, please followthe instructions below.” “验证您的身份&#xff0c;我们已经检测到你…