Web性能监测——Performance对象

一、前言

Web Timing API让开发人员通过javascript就能使用浏览器内部的度量结果,给出了页面加载和渲染过程的很多信息,对性能优化非常有价值。本文将详细介绍web Timing API——performance对象。

二、简述

Web计时机制的核心是window.performance对象。对页面的所有度量信息,包括那些规范中已经定义的和将来才能确定的,都包含在这个对象里面。performance对象包括navigation和timing对象,以及chrome扩展的memory对象,还包括getEntries()和now()两个方法
值得高兴的是,低版本IE也支持performance对象
在这里插入图片描述

1、memory

memory属性是chrome扩展的对象,只有chrome浏览器支持,包含以下三个属性:

jsHeapSizeLimit:表示内存大小限制
totalJSHeapSize:表示可使用的内存
usedJSHeapSize:表示javascript对象占用的内存

2、navigation

performance.navigation属性是一个对象,包含着与页面导航有关的redirectCount和type这两个属性
其中redirectCount表示页面加载前的重定向次数;而type是一个数值常量,表示刚刚发生的导航类型,type有以下取值:

performance.navigation.TYPE_NAVTGATE(0):页面第一次加载
performance.navigation.TYPE_RELOAD(1):页面重载过
performance.navigation.TYPE_BACK_FORWARD(2):页面是通过“后退”或“前进”按钮打开的

console.log(window.performance.navigation.redirectCount);//0
console.log(window.performance.navigation.type);//0

3、timing

performance.timing属性也是一个对象,但这个对象的属性都是时间戳,不同的事件会产生不同的时间值, 下图显示了一个请求发出的整个过程中,各种环节的时间顺序
在这里插入图片描述
 下面按照时间顺序对timing对象的各个属性进行说明
navigationStart: 开始导航到当前页面的时间,即在地址栏输入地址后按下回车时的时间。
redirectStart: 到当前页面的重定向开始的时间。但只有在重定向的页面来自同一个域时这个属性才会有值;否则,值为0
redirectEnd: redirectEnd:到当前页面的重定向结束的时间。但只有在重定向的页面来自同一个域时这个属性才会有值;否则,值为0

console.log(performance.timing.redirectStart);//0
console.log(performance.timing.redirectEnd);//0

fetchStart: 开始通过HTTP GET取得页面的时间
domainLookupStart: 开始使用当前页面DNS的时间,如果使用了本地缓存或持久连接,则与fetchStart值相等。
domainLookupEnd: 査询当前页面DNS结束的时间,如果使用了本地缓存或持久连接,则与fetchStart值相等
connectStart: 浏览器尝试连接服务器的时间
secureConnectionStart: 浏览器尝试以SSL方式连接服务器的时间。不使用SSL方式连接时,这个属性的值为0。
connectEnd: 浏览器成功连接到服务器的时间
requestStart: 浏览器开始请求页面的时间
responseStart: 浏览器接收到页面第一字节的时间
responseEnd: 浏览器接收到页面所有内容的时间
unloadEventStart: 前一个页面的unload事件开始的时间。但只有在前一个页面与当前页面来自同一个域时这个属性才会有值;否则,值为0
unloadEventEnd: 前一个页面的unload事件结束的时间。但只有在前一个页面与当前页面来自同一个域时这个属性才会有值;否则,值为0
domLoading: document.readyState变为"loading"的时间,即开始解析DOM树的时间
domInteractive: document.readyState变为"interactive"的时间,即完成完成解析DOM树的时间
domContentLoadedEventStart: 发生DOMContentloaded事件的时间,即开始加载网页内资源的时间
domContentLoadedEventEnd: DOMContentLoaded事件已经发生且执行完所有事件处理程序的时间,网页内资源加载完成的时间
domComplete: document.readyState变为"complete"的时间,即DOM树解析完成、网页内资源准备就绪的时间
loadEventStart: 发生load事件的时间,也就是load回调函数开始执行的时间
loadEventEnd: load事件已经发生且执行完所有事件处理程序的时间
[注意]在实际情况下,通过performance.timing属性可以找到domInteractive、domContentLoadedEventStart、domContentLoadedEventEnd、domComplete、loadEventStart和loadEventEnd这6个值。但是在单独获取的情况下,这6个值都为0

4、getEntries()

getEntries()方法将返回一个数组,包含了页面中所有的HTTP资源请求。[注意]IE8-浏览器不支持
在这里插入图片描述
在这里插入图片描述
这个是返回浏览器加载一个网页所发出的静态资源(也包含webworker)的性能记录列表
每一项的结构至少有:

{
    name: '资源的名字',
    entryType: '资源的类型,如resource 表示是静态资源,paint 表示是渲染事件',
    startTime: '资源请求的开始时间(注意不是时间戳,而是相对于页面加载起始的偏移时间)',
    duration: '资源请求的耗时'(资源加载开始 => 资源加载结束)
}

举个栗子🌰:
1、静态资源类型:
在这里插入图片描述
2、渲染类型
在这里插入图片描述

5、now()

now()方法返回从页面初始化到调用该方法时的毫秒数
[注意]IE9-浏览器不支持
performance.now()与Date.now()不同的是,返回了以微秒为单位的时间,更加精准,并且与Date.now()会受系统程序执行阻塞的影响不同,performance.now()的时间是以恒定速率递增的,不受系统时间的影响(系统时间可被人为或软件调整)
Date.now()输出的是UNIX时间,即距离1970年1月1日0点的时间,而performance.now()输出的是相对performance.timing.navigationStart(页面初始化)的时间

var t0 = window.performance.now();
doSomething();
var t1 = window.performance.now();
console.log("doSomething函数执行了" + (t1 - t0) + "毫秒.")

6、性能指标♥(ˆ◡ˆԅ)

通过timing属性的这些时间值,就可以全面了解页面在被加载到浏览器的过程中都经历了哪些阶段,而哪些阶段可能是影响性能的瓶颈
【重定向时间】

times.redirect = timing.redirectEnd - timing.redirectStart;
console.log(times.redirect);//0

【DNS查询时间】

times.lookupDomain = timing.domainLookupEnd - timing.domainLookupStart;
console.log(times.lookupDomain);//1

【TCP握手时间】

times.connect = timing.connectEnd - timing.connectStart;
console.log(times.connect);//48

【HTTP响应时间】

times.request = timing.responseEnd - timing.requestStart;
console.log(times.request);//182

最终,性能指标对象times表示如下

var timing = performance.timing;
var times = {
    redirect:timing.redirectEnd - timing.redirectStart,
    lookupDomain:timing.domainLookupEnd - timing.domainLookupStart,
    connect:timing.connectEnd - timing.connectStart,
    request:timing.responseEnd - timing.requestStart
};

参考文章:Thanks♪(・ω・)ノ
https://www.cnblogs.com/xiaohuochai/archive/2017/03/09/6523397.html

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值