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

news2024/9/22 4:03:59

在现代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在未来的进一步改进和应用中发挥更大的作用,为用户提供更好的网页体验。

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

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

相关文章

C语言获取win11新版终端WindowsTerminal窗口句柄

随着Win11的普及,越来越多的人都能发现获取控制台窗口不能再使用以下两种传统方法了: HWND hwnd GetConsoleWindow();HWND hwnd FindWindowA("ConsoleWindowClass",NULL);那是因为win11换了新的终端窗口,叫做WindowsTerminal&am…

60V降压恒流芯片 高调光比LED驱动器 SL6015B替代PT4115 电路简单

在LED照明领域,降压恒流芯片是一种非常重要的芯片,它可以将输入的电压降低并输出稳定的电流,从而为LED灯提供合适的驱动电源。其中,SL6015B是一款非常优秀的降压恒流芯片,它具有高调光比、简单的电路设计、低成本的优点…

三柱汉诺塔

题目描述 汉诺塔是约19世纪末,在欧州的商店中出售一种智力玩具。它的结构如下图所示: 在一个平板上立有三根铁针,分别记为A, B, C。开始时,铁针 A 上依次叠放着从大到小 n 个圆盘,游戏的目标就是将 A 上的 n 个圆盘…

在建立 OkHttp3 Client 时设置超时时间

这里写目录标题 一. 前言二. 导入mavengradle 三. 设置超时时间 一. 前言 OkHttp是一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司开发。OkHttp3是Java和Android都能用,Android还有一个著名网络库叫Volley,那个只有Andro…

torch.cat是什么,以及怎么用?

文章目录 一、torch.cat 是什么?二、使用步骤总结 一、torch.cat 是什么? torch.cat 是 PyTorch 中的一个函数,用于沿着某个维度连接张量。 torch.cat 接受一个张量列表,并沿着某个维度连接它们。这个函数会返回一个新的张量&am…

一键合并多个TXT文本,将保存在TXT的快递单号进行一键合并

如果你需要处理大量的TXT文本文件,那么你可能会遇到需要将这些文件合并为一个文件的情况。这不仅涉及到文件的组织和管理,还可能涉及到文件内容的连贯性和完整性。现在,我们有一个强大的工具,可以帮助你轻松实现一键文件整理&…

C/C++结构体给函数传参

C语言中结构体给函数传参有两种方法: 1.值传递(修改形参不改变原值) void fun(STUDENT student){……} int main(){fun(student); }2.引用传递(传的是地址,修改形参会改变原值) void fun(STUDENT * stud…

深入了解Java 8 新特性:Optional类的实践应用

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概15000多字,预计阅读时间长需10分钟。本篇文章的兼具实战性、理论性,是一篇质量分数较高的技术干货文章&#x…

微服务开发中,使用AOP和自定义注解实现对权限的校验

一、背景 微服务开发中,暴露在外网的接口,为了访问的安全,都是需要在http请求中传入登录时颁发的token。这时候,我们需要有专门用来做校验token并解析用户信息的服务。如下图所示,http请求先经过api网关,网…

【word技巧】Word制作试卷,ABCD选项如何对齐?

使用word文件制作试卷,如何将ABCD选项全部设置对齐?除了一直按空格或者Tab键以外,还有其他方法吗?今天分享如何将ABCD选项对齐。 首先,我们打开【替换和查找】,在查找内容输入空格,然后点击全部…

渗透工具---BurpSuite 插件开发之HelloWorld

本文主要记录如何利用burp官方的新版API即MontoyaApi 写helloworld(上一篇的demo使用旧版api写的,这篇及后续开发将采用新版api) 先看效果图 更多详细内容见下方 这里有更详细更全面的代码内容 以及配置相关的内容 https://mp.weixin.qq.co…

面试题-8

1.vue路由是怎么传参的? params传参 this.$router.push({name:index}) this.$route.params.id 路由属性传参 this.$router.push({name:/index/${item.id}}) 配置路由{path:/index:id} query传参(可以解决页面刷新参数丢失的问题) this.$router.push({ name…

云原生入门系列(背景和驱动力)

做任何一件事,或者学习、应用一个领域的技术,莫过于先要想好阶段的目标和理解、学习它的意义是什么?解决了什么问题? 这部分,就尝试来探讨下这个阶段需要理解并达成的目标以及践行云原生的意义在哪里。 1.历程 任何阶…

海辰储能与FlexGen签署储能系统合作协议,加快拓展北美市场

海辰储能宣布与美国储能技术提供商和系统集成商FlexGen达成合作协议。根据协议,海辰储能将为FlexGen供应10GWh的先进储能产品;同时,其将支持FlexGen能源管理系统(EMS)用于总容量为15GWh的项目。 作为协议的一部分,FlexGen还将成为…

Windows 7 连接 Windows 10 共享打印机,Windows 无法连接打印机,操作失败,错误为0x0000011b 的终极解决办法

Windows 7 连接 Windows 10 共享打印机出现错误 0x000001b,建议不要通过卸载Windows10系统的KB5005565安全更新来解决该问题(犹如削足适履),正确的处理方法是手工添加一个本地打印机,本方法是安全可靠的。本文详述了该…

双12电视盒子推荐:测评员解析目前电视盒子哪个最好

电视盒子不需要每月缴费,只需联网就可以收看海量视频资源,游戏、网课、投屏等功能让电视盒子的使用场景更丰富,我每年都会进行数十次电视盒子测评,本期要分享的是双十二电视盒子推荐,全面解析目前电视盒子哪个最好。 一…

【数据结构】链表的八种形态

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 链表的三大"性状" 一.带头链表和不带头链表 头指针与头结点的异同 头指针 头结点 二.循环链表和非循环链表 三.双向链表和单向链表 链表的八大形态 结语…

Amlogic方案遥控器配置(Android11)

配置路线 键值变化路径: ScanCode --> Keycode Lable --> KeyCode Layout --> KeyLable --> Keycode – > KeyEvent 文件映射路径: *.dtsi --> input-event-codes.h --> *.kl --> InputEventLable.h --> kecodes.h --> P…

laravel引入element-ui后,blade模板中使用elementui时,事件未生效问题(下载element-ui到本地直接引入项目)

背景 重构公司后台项目,使用了dcat-admin,但是dcat-admin有些前端功能不能满足需求。因此引入element-ui进行相关界面的优化 具体流程 1.下载element-ui到本地 2.进入如下目录 打开 node_modules\element-ui\lib 复制index.js 打开 node_modules/ele…

UE4基础篇十五:AI行为树

一、学习完教程后需要掌握知识点 1.1、基础概念: 1.1 行为树:控制并显示AI的决策制定过程 1.2 黑板:可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的逻辑 1.3 环境查询: 获取地图环境中的信息进行一个筛选,查找到所需要的的…