window.performance 性能监控

window.performance

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

首先,window.performance是用来测量网页和web应用程序的性能,他提供一组精确的数据,通过一些简单的计算,就可以得出一些有关网页的性能数据。接下来我们一起看看吧。

memory

memory是window.performance对象中一个重要的属性,他表示javascript对内存的占用。

window.performance.memory;
//memory对象格式
memory:{
    jsHeapSizeLimit:1136000000,// 内存大小限制
    totalJSHeapSize:11200000,// 可使用的内存
    usedJSHeapSize:10000000 // JS 对象(包括V8引擎内部对象)占用的内存,一定小于 totalJSHeapSize
}
复制代码
navigation

navigation同样作为window.performance对象下的重要属性,他主要表示当前页面的进入方式,是重定向,正常进入,刷新进入还是回退进入。

    navigation: {
        redirectCount: 0, // 如果有重定向的话,页面通过几次重定向跳转而来
        type: 0           // 0   即 TYPE_NAVIGATENEXT 正常进入的页面(非刷新、非重定向等)
                          // 1   即 TYPE_RELOAD       通过 window.location.reload() 刷新的页面
                          // 2   即 TYPE_BACK_FORWARD 通过浏览器的前进后退按钮进入的页面(历史记录)
                          // 255 即 TYPE_UNDEFINED    非以上方式进入的页面
    },

复制代码
timing

timing属性主要包括了浏览器从unload(卸载)之前的页面到新页面的load(加载完成)期间的一些列动作所消耗的时间,其执行过程为:

timing:{
    navigationStart:, //浏览器在开始unload前一个页面的时间节点
    //如果页面是由redirect而来
    redirectStart: //代表redirect的开始时间节点
    redirectEnd: //代表redirect的结束时间节点
    //如果前一个文档和请求的文档是同一个域的,则unloadEventStart和unloadEventEnd分别代表浏览器unload前一个文档的开始和结束时间节点。否则两者都等于0;
    unloadEventStart:
    unloadEventEnd:
    fetchStart: //浏览器发起任何请求之前的时间值
    domainLookupStart: //DNS查询的开始时间节点
    domainLookupEnd: //DNS查询结束的时间节点
    connectStart: //建立TCP连接时间节点
    connectEnd: //TCP连接成功时间节点
    
    secureConnectStart://可选。如果页面使用HTTPS,它的值是安全连接握手之前的时刻。如果该属性不可用,则返回undefined。如果该属性可用,但没有使用HTTPS,则返回0;
    requestStart: //发送请求的时间节点
    responseStart: //开始响应请求的时间节点
    responseEnd: //完成响应的时间节点
    domLoading: //代表浏览器开始解析html文档的时间节点
    domInteractive: //代表浏览器解析html文档的状态为interactive时的时间节点
    domContentLoadEventStart://代表DOMContentLoaded事件触发的时间节点
    domContentLoadEventEnd: //代表DOMContentLoaded事件完成的时间节点
    domCompelect: //html文档完全解析完毕的时间节点;
    //loadEventStart和loadEventEnd分别代表onload事件触发和结束的时间节点
    loadEventStart: 
    loadEventEnd:

}
复制代码
性能计算

根据上面的时间节点信息,我们可以分别计算出DNS查询耗时,TCP连接耗时,DOM解析时间等等

DNS查询耗时 = domainLookupEnd - domainLookupStart
TCP链接耗时 = connectEnd - connectStart
request请求耗时 = responseEnd - responseStart
解析dom树耗时 = domComplete - domInteractive
白屏时间 = domloadng - fetchStart
domready时间 = domContentLoadedEventEnd - fetchStart
onload时间 = loadEventEnd - fetchStart
复制代码
window.performance.getEntries();

当我们想要分析每个请求具体的耗时情况,我们可以使用window.performance.getEntries()方法返回所有请求数组。包括每个请求的详情。

connectStart: 
connectEnd:
initiatorType:'img', //请求资源类型【img/script/xmlhttprequst】
duration:108.39999999850988,//请求耗时
requstStart:
responseStart:
responseEnd:
复制代码

等等一系列资源请求的数据,可以根据这些数据进行具体的分析。 附上一段获取性能数据的代码

var timing = window.performance.timing;
	//重定向耗时
	var redirectTime = timing.redirectEnd - timing.redirectStart;
	console.log('重定向耗时',redirectTime);
	//卸载上一个页面耗时
	var unloadTime = timing.unloadEventEnd - timing.unloadEventStart;
	console.log('卸载上一个页面耗时',unloadTime);
	//DNS查询耗时
	var domainTime = timing.domainLookUpEnd - timing.domainLookUpStart;
	console.log('DNS查询耗时',domainTime);
	//TCP连接耗时
	var tcpConnectTime = timing.connectEnd - timing.connectStart;
	console.log('TCP连接耗时',tcpConnectTime);
	//DOM开始加载前所花费时间
	var beforeDomLoadTime = timing.responseEnd - timing.navigationStart;
	console.log('DOM开始加载前所花费时间',beforeDomLoadTime);
	//请求耗时
	var responseTime = timing.responseEnd - timing.requestStart;
	console.log('请求耗时',responseTime);
	//DOM完成加载耗时
	var domLoadTime = timing.domCompelect - timing.domLoading;
	console.log('DOM完成加载耗时',domLoadTime);
	//DOM结构完成解析耗时
	var domComplieTime = timing.domInteractive - timing.domLoading ;
	console.log('DOM结构完成解析耗时',domComplieTime);
	//脚本加载时间
	var contentLoadTime = timing.domContentLoadedEventEnd - timing.domContentLoadedEventStart;
	console.log('脚本加载时间',contentLoadTime);
	//onload事件时间
	var loadTime = timing.loadEventEnd - timing.loadEventStart;
	console.log('onload事件时间',loadTime);
	//页面完全加载耗时
	var fullTime = redirectTime + unloadTime + domainTime + tcpConnectTime + responseTime+
					domLoadTime + domComplieTime ;
复制代码

转载于:https://juejin.im/post/5aed57e251882567382f7a92

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值