Perform作为前端工程师,无论是业务需要还是我们对于自己开发的Web站点的要求,往往都有性能监测以及数据上报的需求。而Performance API除了简单易用对前端工程师极其友好的特点之外,还有能提供高精确度的时间测量(千分之一毫秒)这个特点。

1.Performance方法

Performance提供的方法可以灵活使用,获取到页面加载等标记的耗时情况。

performance.now()    //返回当前到页面打开时刻的耗时,精确到千分之一毫秒
performance.mark('worker_installed')    //建立测速标记
performance.clearMarks()    //清除标记
performance.getEntries()    //对网页发起的所有HTTP请求耗时信息统计后,以数组方式返回

2.Performance属性

Performance.timing属性对象提供了浏览器从打开网页到加载完成之间各个节点的耗时数据,包括重定向开始、DNS查询、浏览器响应数据、DOM解析等相关节点。通过组合计算我们可以的出我们所需的各个阶段的耗时数据,从而进行分析。

navigationStart:浏览器窗口的前一个网页关闭时发生unload事件时的Unix时间戳,属于最前的测量时间点。unloadEventStart:前网页与当前网页同属一个域名时,返回前一个网页的unload事件发生时的Unix时间戳。unloadEventEnd:前网页与当前网页同属一个域名时,返回前一个网页unload事件的回调函数结束时的Unix时间戳。redirectStart:返回第一个HTTP跳转开始时的Unix时间戳。redirectEnd:返回最后一个HTTP跳转结束时的Unix时间戳。fetchStart:返回浏览器准备使用HTTP请求读取文档等资源时的Unix时间戳,在网页查询本地缓存之前发生。domainLookupStart:返回域名查询开始时的Unix时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于fetchStart属性的值。domainLookupEnd:返回域名查询结束时的Unix毫秒时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于fetchStart属性的值。connectStart:返回HTTP请求开始向服务器发送时的Unix毫秒时间戳。如果使用持久连接(persistent connection),则返回值等同于fetchStart属性的值。connectEnd:返回浏览器与服务器之间的连接建立时的Unix毫秒时间戳。如果建立的是持久连接,则返回值等同于fetchStart属性的值。连接建立指的是所有握手和认证过程全部结束。secureConnectionStart:返回浏览器与服务器开始安全链接的握手时的Unix毫秒时间戳。如果当前网页不要求安全连接,则返回0。requestStart:返回浏览器向服务器发出HTTP请求时(或开始读取本地缓存时)的Unix毫秒时间戳。responseStart:返回浏览器从服务器收到(或从本地缓存读取)第一个字节时的Unix毫秒时间戳。responseEnd:返回浏览器从服务器收到(或从本地缓存读取)最后一个字节时(如果在此之前HTTP连接已经关闭,则返回关闭时)的Unix毫秒时间戳。domLoading:返回当前网页DOM结构开始解析时(即Document.readyState属性变为“loading”、相应的readystatechange事件触发时)的Unix毫秒时间戳。domInteractive:返回当前网页DOM结构结束解析、开始加载内嵌资源时(即Document.readyState属性变为“interactive”、相应的readystatechange事件触发时)的Unix毫秒时间戳。domContentLoadedEventStart:返回当前网页DOMContentLoaded事件发生时(即DOM结构解析完毕、所有脚本开始运行时)的Unix毫秒时间戳。domContentLoadedEventEnd:返回当前网页所有需要执行的脚本执行完成时的Unix毫秒时间戳。domComplete:返回当前网页DOM结构生成时(即Document.readyState属性变为“complete”,以及相应的readystatechange事件发生时)的Unix毫秒时间戳。loadEventStart:返回当前网页load事件的回调函数开始时的Unix毫秒时间戳。如果该事件还没有发生,返回0。loadEventEnd:返回当前网页load事件的回调函数运行结束时的Unix毫秒时间戳。如果该事件还没有发生,返回0。

Performance.navigation属性对象提供了浏览器的一些行为信息。

Performance.navigation.type    //通过整数值表示网页从何加载
//0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载
//1:网页通过“重新加载”按钮或者location.reload()方法加载
//2:网页通过“前进”或“后退”按钮加载
//255:其他来源的加载Performance.navigation.redirectCount    //页面重定向次数

Performance.memory属性对象提供了浏览器的内存使用情况。

3.实例代码

// 计算加载时间
function getPerformanceTiming() {var performance = window.performance;if (!performance) {// 当前浏览器不支持console.log('你的浏览器不支持 performance 接口');return;}var t = performance.timing;var times = {};//【重要】页面加载完成的时间//【原因】这几乎代表了用户等待页面可用的时间times.loadPage = t.loadEventEnd - t.navigationStart;//【重要】解析 DOM 树结构的时间//【原因】反省下你的 DOM 树嵌套是不是太多了!times.domReady = t.domComplete - t.responseEnd;//【重要】重定向的时间//【原因】拒绝重定向!比如,http://example.com/ 就不该写成 http://example.comtimes.redirect = t.redirectEnd - t.redirectStart;//【重要】DNS 查询时间//【原因】DNS 预加载做了么?页面内是不是使用了太多不同的域名导致域名查询的时间太长?// 可使用 HTML5 Prefetch 预查询 DNS ,见:[HTML5 prefetch](http://segmentfault.com/a/1190000000633364)            times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;//【重要】读取页面第一个字节的时间//【原因】这可以理解为用户拿到你的资源占用的时间,加异地机房了么,加CDN 处理了么?加带宽了么?加 CPU 运算速度了么?// TTFB 即 Time To First Byte 的意思// 维基百科:https://en.wikipedia.org/wiki/Time_To_First_Bytetimes.ttfb = t.responseStart - t.navigationStart;//【重要】内容加载完成的时间//【原因】页面内容经过 gzip 压缩了么,静态资源 css/js 等压缩了么?times.request = t.responseEnd - t.requestStart;//【重要】执行 onload 回调函数的时间//【原因】是否太多不必要的操作都放到 onload 回调函数里执行了,考虑过延迟加载、按需加载的策略么?times.loadEvent = t.loadEventEnd - t.loadEventStart;// DNS 缓存时间times.appcache = t.domainLookupStart - t.fetchStart;// 卸载页面的时间times.unloadEvent = t.unloadEventEnd - t.unloadEventStart;// TCP 建立连接完成握手的时间times.connect = t.connectEnd - t.connectStart;return times;
}

4.总结

1.对于网页的测速上报需求,可以通过对Performance.timing对象的属性排列组合,计算出业务需要的测速数据。

2.对于网页的性能监测需求,可以通过对Performance.memory对象进行分析,得出内存使用情况等数据。

3.对于页面的其他业务监测需求,可以通过Performance提供的其他方法进行灵活使用,计算出业务所需数据。

Performance_js中计算网站性能监控利器相关推荐

  1. Performance — 前端性能监控利器

    2019独角兽企业重金招聘Python工程师标准>>> 最近在写一个监控脚本,终于有机会接触到了这一块,整理后写下了本文. Performance是一个做前端性能监控离不开的API, ...

  2. 谷歌测试工程师分享前端性能监控利器Performance

    最近在写一个监控脚本,终于有机会接触到了这一块,整理后写下了本文. Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到 ...

  3. MySQL 的实时性能监控利器

    操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,io ...

  4. 如何使用Dareboost改善网站性能(和转化)

    This article was sponsored by Dareboost. Thank you for supporting the partners who make SitePoint po ...

  5. Android 系统性能优化(52)---移动端性能监控方案Hertz

    移动端性能监控方案Hertz 性能问题是造成App用户流失的罪魁祸首之一.App的性能问题包括崩溃.网络请求错误或超时.响应速度慢.列表滚动卡顿.流量大.耗电等等.而导致App性能低下的原因有很多,除 ...

  6. Informix 11.5 SQL 语句性能监控方法及实现

    本文主要介绍 Informix 11.5 中 SQL 语句性能监控的基本方法及实现,希望能够使大家有一个比较全面的了解. 我们知道,在数据库应用系统中,SQL 语句的性能好坏至关重要.如果 SQL 语 ...

  7. 天眼监控体系的新成员,App性能监控

    天眼平台是中国联通IT研发中台体系中的生产运营支撑平台,对生产运营领域提供端到端.云化架构全层级的运维工具支撑:App性能监控是天眼应用实时监控体系中的一部分,深度剖析移动端的应用性能,为App保驾护 ...

  8. 【性能监控】计算 FMP(First Meaningful Paint)

    (一)含义 FMP(First Meaningful Paint),即首次绘制有意义内容的时间 FMP 衡量了用户看到网页的主要内容的时间,是用户体验角度的一种重要的衡量指标 主角元素可以是视频网站的 ...

  9. 微信团队自研的APM利器,Matrix性能监控日志探索

    1 前言 2018年12月25日,微信团队自研的APM利器,Matrix正式开源了. https://github.com/tencent/matrix ❝ Matrix 是一款微信研发并日常使用的 ...

最新文章

  1. 使用fork并发处理多个client的请求和对等通信p2p
  2. Windows上使用gitbook制作电子书
  3. tp5中mysql使用REGEXP 正则匹配
  4. 标识符的作用域与可见性
  5. 终端服务器超出了最大允许连接数
  6. Numpy_where
  7. 长江大学计算机网络期末考试试题及答案,长江大学计算机基础考试试题
  8. ThreadX内核源码分析 - 事件
  9. c哩c哩歌是什么语言,c哩c哩是什么歌 音译歌词
  10. 0031 练习(猜拳游戏)
  11. HDU-6441-Find Integer(费马大定理+勾股数)
  12. 在输入框加入搜索图标的问题
  13. 智能坐便器雷达感应技术,微波雷达感应模组应用,雷达传感器方案
  14. Cookie、Session、Token、JWT 看一篇就够了
  15. windows部署hadoop环境
  16. ZJYYC 活字印刷 DFS
  17. 如何搭建一个公链?公链生态“吸金“七件套,缺一不可
  18. SAAS云服务三种模式
  19. java控制台_JAVA控制台输入输出方法总结
  20. Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

热门文章

  1. 删除数组中指定元素或指定值
  2. 中文、英文和中英文混合排序
  3. Xenapp appcenter初始化报错:Errors occurred when using XAC-1 in the discovery process
  4. 【java】java 队列 LinkedBlockingQueue
  5. 多选框改变状态颜色跟着变化
  6. chrome 27 中文离线安装包下载
  7. centos 文档内容编辑命令
  8. python爬虫抓取分页_Python爬虫—简书首页数据抓取
  9. 关于HDC GetDC ReleaseDC
  10. Qt富文本 - 文档边框格式