JS 中的 performance,测量web应用性能

news2024/9/27 23:29:16

文章目录

    • 属性和方法
      • performance.memory 内存
      • performance.navigation 页面的来源信息
      • performance.timing 时间消耗
      • 相关时间计算
      • Performance.mark()
      • performance.now()

Web Performance API 允许网页访问某些函数来测量网页和 Web 应用程序的性能

performance 包含如下属性和方法
在这里插入图片描述

  • eventCounts:包含每个事件类型被分派的事件数量

  • memory:只有在chrome才有,提供了基本内存的使用情况

  • navigation:该对象表示在当前给定浏览上下文中网页导航的类型,提供了操作的上下文,包括页面的加载,刷新,重定向次数等等

  • timing:这个对象包括了页面相关的性能信息

  • timeOrigin: 高精度时间戳。目前该属性在实验中。

属性和方法

performance.memory 内存

MDN:“它是 Chrome 添加的一个非标准扩展,这个属性提供了一个可以获取到基本内存使用情况的对象。不应该使用这个非标准的 API。”

performance.memory 包含此刻内存占用的情况,包含3个属性

  • jsHeapSizeLimit:上下文可用堆内存的上限(最大体积,以字节计算);
  • totalJSHeapSize:已分配的堆内存大小(可使用的内存);
  • usedJSHeapSize:当前JS活动对象占用的内存,如果 usedJsHeapSize 大于 totalJsHeapSize 可能存在了内存泄漏,所以不允许大于totalJSHeapSize。

在这里插入图片描述

performance.navigation 页面的来源信息

提供了在指定的时间段里发生的操作相关信息,包括页面是加载还是刷新、发生了多少次重定向等等

有两个属性:

  • redirectCount:表示到达最终页面前,重定向的次数,但是这个接口有同源策略限制,即仅能检测同源的重定向。

  • type:志页面导航类型

    type常数枚举值描述
    TYPE_NAVIGATE0普通进入,包括:点击链接、在地址栏中输入 URL、表单提交、或者通过除下表中 TYPE_RELOAD 和 TYPE_BACK_FORWARD 的方式初始化脚本。
    TYPE_RELOAD1通过刷新进入,包括:浏览器的刷新按钮、快捷键刷新、location.reload()等方法。
    TYPE_BACK_FORWARD2通过操作历史记录进入,包括:浏览器的前进后退按钮、快捷键操作、history.forward()、history.back()、history.go(num)。
    TYPE_UNDEFINED255其他非以上类型的方式进入。

在这里插入图片描述

performance.timing 时间消耗

performance.timing 对象包括了页面相关的性能信息。

在这里插入图片描述

在这里插入图片描述

  • navigationStart:浏览器 unload 前一个页面文档(document)的开始时间节点。如果没有之前的页面,此属性的值等于 fetchStart。

    例如当前在浏览baidu.com,在地址栏输入google.com并回车,浏览器执行的动作依次为:unload 当前文档(baidu.com)—> 请求下一个文档(google.com)。navigationStart 的值就是触发unload当前文档的时间节点。

  • **redirectStart **和 redirectEnd: 如果在导航时存在HTTP重定向或等效内容(页面由redirect而来),并且所有重定向或等效内容都来自同一个原点,则 redirectStart 和 redirectEnd 分别代表redirect开始和结束的时间节点,否则值为0。

  • **unloadEventStart **和 unloadEventEnd:如果先前文档和当前文档具有相同的来源(同一个域),则 unloadEventStart 和 unloadEventEnd 分别代表浏览器unload先前文档的开始和结束时间节点。否则两者都等于0。

  • fetchStart:是指在浏览器发起任何请求之前的时间值。在fetchStart 和 domainLookupStart 之间,浏览器会检查当前文档的缓存。

  • domainLookupStartdomainLookupEnd:分别代表DNS查询的开始和结束时间节点。如果浏览器没有进行DNS查询(比如使用了cache),则两者的值都等于 fetchStart。

  • connectStartconnectEnd:分别代表TCP建立连接和连接成功的时间节点。如果浏览器没有进行TCP连接(比如使用持久化连接 webscoket、使用缓存或本地资源),则两者都等于 domainLookupEnd。

  • secureConnectionStart:可选。如果页面使用HTTPS,它的值是安全连接握手之前的时刻。如果该属性不可用,则返回 undefined。如果该属性可用,但没有使用HTTPS,则返回0。

  • requestStart:代表浏览器发起请求的时间节点,请求的方式可以是请求服务器、缓存、本地资源等。如果发送请求后传输连接失败,并且浏览器重新打开连接并重新发送请求,则 requestStart 返回新请求的值。

  • responseStartresponseEnd:分别代表浏览器收到从服务器端(或缓存、本地资源)收到响应的第一个字节 和 最后一个字节数据(或关闭传输连接之前,以先到者为准)的时刻。

  • domLoading:当浏览器将 document.readyState 设置为 loading 的时间节点,也就是浏览器开始解析html文档的时间节点。

  • domInteractive:当浏览器将 document.readyState 设置为 interactive 的时间节点。domInteractive 并非 DOMReady,它早于 DOMReady 触发,代表html文档解析完毕(即dom tree创建完成)但是内嵌资源(比如外链css、js等)还未加载的时间点。

  • domContentLoadedEventStart:代表 DOMContentLoaded 事件触发的时间节点。

    MDN:当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完全加载。

  • domContentLoadedEventEnd:代表 DOMContentLoaded 事件完成的时间节点,此刻用户可以对页面进行操作,也就是jQuery中的domready时间。

  • domComplete:html文档完全解析完毕的时间节点。

  • loadEventStartloadEventEnd:分别代表 load 事件触发和结束的时间节点。当未触发load 事件时,值为 0,当未完成 load 事件时 loadEventEnd 为 0 。

相关时间计算

  • 重定向时间:redirectEnd - redirectStart

  • 页面加载耗时:loadEventEnd - navigationStart

  • DNS查询耗时:domainLookupEnd - domainLookupStart

  • TCP链接耗时:connectEnd - connectStart

  • request请求耗时:responseEnd - responseStart

  • 解析dom树耗时:domComplete - domInteractive

  • 白屏时间:domloading - fetchStart

  • domready可操作时间:domContentLoadedEventEnd - fetchStart

  • onload总下载时间:loadEventEnd - fetchStart

Performance.mark()

  • mark() 方法在浏览器的性能缓冲区中使用给定名称添加一个timestamp(时间戳),可以多次重复录入

  • 语法: performance.mark(name)

  • 可以使用 performance.getEntriesByName() 获取到对应的Array

  • 可以使用 performance.clearMarks() 清除

performance.now()

该对象表示从某一时刻(通常是 navigationStart 事件发生时刻)开始计算毫秒数,通过两次时间相减可以计算某个操作的间隔时间

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

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

相关文章

Linux基础IO【软硬链接与动静态库】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、软硬链接1.1、基本认知1.2、实现原理1.3、应用场景1.4、取消链接1.5、ACM时…

JavaWeb ( 一 ) HTTP协议

1.http协议 1.0.Web Web指的是World Wide Web,也称为万维网,是一种基于互联网的信息系统,由全球数百万个网站组成。它允许用户通过使用网页浏览器访问和交互信息,例如阅读新闻、购物、发送和接收电子邮件、社交媒体等。 Web使用…

解密.[support2022@cock.li].faust后缀勒索病毒加密的文件:拯救您的企业数据的完整指南!

引言: 您的企业数据是您业务的核心。但是,当.[support2022cock.li].faust后缀勒索病毒突袭您的系统时,您的数据将遭受沉重打击。这种恶意软件利用高级加密算法,将您的文件锁定在无法访问的状态。在这篇详细的指南中,9…

tcp/ip

这里写自定义目录标题 线程 防止阻塞 123 windows下4 https://zhuanlan.zhihu.com/p/139454200 https://www.bilibili.com/video/BV1eg411G7pW/?spm_id_from333.337.search-card.all.click&vd_sourcee7d12c9f66ab8294c87125a95510dac9 with socket.socket() as s:s.bind(…

xcode Swift Log CocoaLumberjack

参考【iOS】CocoaLumberJack日志库集成 - 简书 logging - How to capture Device Logs in iOS during Runtime into a file in Documents Directory from iPhone? - Stack Overflow GitHub - apple/swift-log: A Logging API for Swift 如何导出日志 方法一发邮件&#xf…

Vue——Elementui案例实现

需求分析: 对于上面要仿照的页面先新建一个页面组件EmpView.vue组件在views文件夹下 基本页面布局 对于上面页面的布局其实在Element当中也可以找到相应可以实现的组件, 成功找到一个符合要求的布局,直接复制粘贴到项目里面 此时页面相应的位置已经有了对应的占位单…

自动化运维工具 Ansible

目录 Puppet 自动运维工具特点: Saltstack 自动运维工具特点: Ansible 自动运维工具特点: Ansible 运维工具原理 Ansible 管理工具安装配置 Ansible 工具参数详解 Ansible ping 模块实战 Ansible command 模块实战 Ansible copy 模块实战 Ansib…

uboot第二阶段 start_armboot函数代码分析

1.1、start_armboot函数简介 这个函数整个构成了uboot启动的第二阶段。 1.2、uboot第二阶段做的事情 uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟、串口…),然后初始化DDR并且完成重定位。那么,uboot的第…

数字化转型导师坚鹏:企业数字化营销能力提升

企业数字化营销能力提升 课程背景: 很多企业存在以下问题: 不清楚数字化营销对企业发展有什么影响? 不知道如何提升企业数字化营销能力? 不知道企业如何开展数字化营销工作? 课程特色: 原创企业数…

vcruntime140.dll无法继续执行代码?vcruntime140.dll如何修复?只需要3步即可

vcruntime140.dll是用于Microsoft Visual C Redistributable(可再发行组件)的一部分,它是一个动态链接库文件,包含了该软件包提供的运行库。在许多应用程序和游戏中,vcruntime140.dll文件经常被使用。如果该文件缺失或…

Tkinter正则表达式工具

文章目录 🏳️‍🌈 1. 导入tkinter和re模块🏳️‍🌈 2. 设置窗口居中🏳️‍🌈 3. 设置lable、text、button布局🏳️‍🌈 4. 设置下拉列表框🏳️‍🌈 5. 清空文…

Scrum敏捷开发和项目管理流程及工具

Scrum是全球运用最广泛的敏捷管理框架,Leangoo基于Scrum框架提供了一系列的流程和模板,可以帮助敏捷团队快速启动Scrum敏捷开发。 这里可以介绍一下在scrum中单团队敏捷开发如何管理,单团队敏捷开发主要是针对10-15人以下,只有一…

零基础如何学习挖漏洞?看这篇就够了【网络安全】

前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…

Qt常用快捷键

Qt常用快捷键 1.添加头文件:Alt Enter2.查看槽函数的实现 位置:F2 / F43.快速查看帮助文档:F14.代码快速对齐:Ctrl I5.代码全选:Ctrl A6.保存:Ctrl S7.代码复制:Ctrl C8.代码粘贴&#xff…

Flutter之插件开发plugin

目的:适用于独立业务模块,或者与原生页面交互频繁的地方。 基于flutter3.x , IDE :androidStudio 步骤: 1.新建flutter project 【New flutter project】. 2. 在新建工程面板记得切换 Project Type, 选择【PLugin】. 其他的根据足迹需求选择就行。 3. 在flutter主工…

联想凌拓教育行业解决方案

联想凌拓教育行业解决方案 教育部等六部门《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》,指出:信息网络、平台体系、数字资源、智慧校园、创新应用、可信安全的新型基础设施为六大发展重点,需建立全面覆盖的标准规范体…

文献集锦 | 非因生物空间多组学技术在头颈部肿瘤中的研究策略

头颈部鳞状细胞癌(HNSCC)是全球第七大癌症病因,是一种异质性恶性肿瘤,起源于上呼吸道,尤其是鳞状粘膜线。唇部、口腔和鼻腔、鼻窦、喉、鼻咽、口咽和下咽是HNSCC的受累部位。利用空间组学分析平台深入剖析组织肿瘤微环境,对深入理…

【大数据之Hadoop】从自定义 RPC 到 Hadoop RPC ,理解分布式通信系统的底层工作原理

1. 前言 Hadoop是分布式计算系统,在分布式环境中,网络通信模块是其核心模块之一。要学好Hadoop,需理解其底层通信系统的基本工作原理。Hadoop提供有体系完整的RPC框架,实现了对底层网络通信过程的优雅封装。 本文将从RPC概念说起…

从五一的旅游热潮看,该如何实现数字文旅的转型升级?

文旅产业是文化和旅游行业的融合,属于国家战略性产业,资源消耗低,带动系数大,就业机会多,综合效益好。改革开放以来,随着国内工业化、城镇化的快速发展,日益增长的大众化、多样化消费需求为文旅…

java电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…