Performance使用说明js中计算网站性能监控利器_js知识教程视频

Perform作为前端工程师,无论是业务需要还是我们对于自己开发的Web站点的要求,往往都有性能监测以及数据上报的需求。而Performance API除了简单易用对前端工程师极其友好的特点之外,还有能提供高精确度的时间测量(千分之一毫秒)这个特点。1.Performance方法Performance提供的方法可以灵活使用,获取到页面加载等标记的耗时情况。p

Performance使用说明js中计算网站性能监控利器

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

Performance使用说明js中计算网站性能监控利器_js知识教程视频

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.com
    times.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_Byte
    times.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提供的其他方法进行灵活使用,计算出业务所需数据。

海计划公众号
(0)
上一篇 2020/04/03 19:47
下一篇 2020/04/03 19:47

您可能感兴趣的内容

  • 使用html5 canvas绘制圆形或弧线使用攻略_canvas入门教程

    在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍:arc(x, y, radius, startRad, endRad, anticlockwise)在canvas画布上绘制以坐标点 (x,y)为圆心、半径为 radius的圆上的一段弧线。这段弧线的起始弧度是 startRad

    2020/03/29
  • JS函数式的编程思想新手入门_编程基础教程

    今天这篇文章主要介绍函数式编程的思想。函数式编程有用吗?什么是函数式编程?函数式编程的优点。面向对象编程(OOP)通过封装变化使得代码更易理解。函数式编程(FP)通过最小化变化使得代码更易理解。– Michacel Feathers(Twitter)总所周知 JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复杂性,变得笨拙

    2020/03/24
  • 如何撤销 Git 操作?小白帮助_git入门基础教程

    Git 版本管理时,往往需要撤销某些操作。本文介绍几种最主要的情况,给出详细的解释。更多的命令可以参考《常用 Git 命令清单》一文。一、撤销提交一种常见的场景是,提交代码以后,你突然意识到这个提交有问题,应该撤销掉,这时执行下面的命令就可以了。$ git revert HEAD上面命令的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。

    2020/03/20
  • Js Generators使用指南入门知识_指南使用教程

    最近,为了更好地理解Redux Sagas的工作原理,我重学了JavaScript generators的知识,我把从网上收集到的各种知识点浓缩到一篇文章里,我希望这篇文章既通俗易懂,又足够严谨,可以作为初学者的generators使用指南。简介JavaScript在ES6时引入了生成器。生成器函数与常规函数类似,除了可以暂停和恢复它们这一点以外。生成器也与

    2020/03/29
  • CSS中的focus-within伪类选择器小白知识_选择器攻略教程

    css中:focus-within是什么在CSS中 :focus-within 是一个伪类,现在已经被列入到CSS选择器中(CSS Level 4 selector)。CSS中伪类:focus-within能非常方便处理获取焦点状态, 当元素本身或其后代获得焦点时,:focus-within伪类的元素就会有效。没看懂,可以看下面的例子:<div class=

    2020/04/03
  • Redis使用10个小技巧菜鸟知识_redis基础知识

    Redis使用10个小技巧菜鸟知识 Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一…

    2020/03/19
  • 最终,我们放弃了微服务小白知识_微服务基础入门

    微服务被认为是一种理想的架构模式,因此,Steven Lemon 所在公司的领导层决定从单体架构向微服务架构迁移,这让整个开发团队在随后的的日子里苦不堪言,七大现实问题摆在面前无法解决,微服务架构的好处也没有享受到,并发现这不单单是一个技术问题。最终,整个团队决定放弃。领导决定:迁移微服务最近,我所在的开发团队在紧张的交付周期结束后,有了短暂的休息机会。领导

    2020/03/26
  • 在5分钟内搭建企业内部私有npm仓库入门指南_npm菜鸟教程下载

    下面通过三种方法来搭建公司私有npm仓库,每种方式都有自己的优势。Node.js >= 6.11.3,我的Node版本:node v8.2.1Linux or OSX,我的系统版本:CentOS Linux release 7.2.1511 (Core)一、安装npm install -g –build-from-source cnpmjs.org cnp

    2020/04/06
  • 在Linux 命令行中转换大小写小白常识_Linux菜鸟教程

    在Linux 命令行中转换大小写小白常识 有很多方法可以在 Linux 命令行中将文本从小写更改为大写,反之亦然。实际上,有一组这样的命令可以选择。这篇文章检验了一些优秀的命令来完…

    2020/03/20
  • js检测页面上一个元素是否已经滚动到了屏幕的可视区域内基础知识_js知识基础教程

    应用场景:只要页面加载了,其中在页面中出现的li就向控制台输出第几个发送请求;在本次加载的页面中,再将滚动条滚回前边的li,不再向控制台输出东西,也就是说已经显示过的li,不再向控制台输出东西。

    • 0001
    • 0002
    • 0003
    • 0004</li
    2020/04/05
  • 微信小程序不支持Echarts中tooltip的解决方法入门基础知识_echarts小白基础

    一.问题 Echarts官方文档明确指出自己不支持微信小程序中使用Tooltip这个功能。但是只要做过图表设计的人都知道,Tooltip这个功能有多么重要,尤其是对于line图而言。那么如何解决或者说间接实现tooltip呢?二.解决思路1.第一种思路:1). 在原来的图上加一个label设置让他显示每个数据的纵坐标。当然,因为数据过多的原因,他

    2020/04/03
  • 什么是在线代理ip网页代理基础教程_代理攻略教程

    当我们需要大量IP进行快节奏完成业绩的时候,很多人都会想到去IP代理服务商那里购买IP代理,所以我相信很多人对于IP代理这个词已经有一定的认识了,那么还有一个词叫做:“在线代理ip网页代理”这个词和IP代理有什么区别,那么犀牛代理在这里就简单的为大家介绍一下这个词的含义,在线代理又叫做代理服务器,其功能是代理网络上的某一个使用获取网络信息,也就是扮演一个中间

    2020/04/03
  • 在Vue框架下使用Fullcalendar基础知识教程_框架小白攻略

    Fullcalendar是一个非常受欢迎的日历日程处理的js组件,它功能强大,文档齐全,可定制化高,可与你的项目无缝对接。本站之前有很多文章介绍了Fullcalendar(v3)的使用。今天我们来看看如何在Vue框架下使用Fullcalendar。安装Fullcalendar首先第一步当然是安装FullCalendar相关的依赖。我们需要安装Vue适配、核心

    2020/03/21
  • 奇舞团基础入门奇虎360旗下前端开发团队出品

    奇舞团基础入门 官方网址:https://75team.com/ 简介描述:奇虎360旗下前端开发团队出品 开源与产品 ThinkJS 是一款Node.js MVC框架 组件化H5…

    2020/03/05
  • Vue中的全部指令入门知识_指令入门百科

    动态参数可以用方括号括起来的 JavaScript 表达式作为一个指令的参数: … 动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。动态参数表达式有一些语法约束,因为某些字符,例如空

    2020/03/29
  • 推荐几款能提升代码效率的笔记应用使用攻略_效率小白攻略

    编程容易产生挫折,即使作为一种业余爱好也可能是这样。建立一个网页,手机APP或桌面应用都是个很大的工程,好的记笔记技能是让这个工程井然有序的关键,也是克服压力、绝望和倦怠的好方法。但是大多数笔记应用的设计并不是以程序员作为目标受众,这些程序可能会让使用者用起来很难受,甚至完全放弃这些工具。这就是为什么我们为你找来了这些最好的笔记工具。快来看看——你会爱上它们

    2020/03/23