首页 > 代码库 > 使用html5 window.preformance监控应用性能

使用html5 window.preformance监控应用性能

HTML5草案中提供了 window.preformance的API,我们可以基于该API实现我们的应用前端监控,我们可以在firebug中查看到响应的属性及值,如下所示:

技术分享

其中各字段含义如下:

技术分享

 

· navigationStart:当前浏览器窗口的前一个网页关闭,发生unload事件时的Unix毫秒时间戳。如果没有前一个网页,则等于fetchStart属性。· unloadEventStart:如果前一个网页与当前网页属于同一个域名,则返回前一个网页的unload事件发生时的Unix毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为0。· unloadEventEnd:如果前一个网页与当前网页属于同一个域名,则返回前一个网页unload事件的回调函数结束时的Unix毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为0。· redirectStart:返回第一个HTTP跳转开始时的Unix毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为0。· redirectEnd:返回最后一个HTTP跳转结束时(即跳转回应的最后一个字节接受完成时)的Unix毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为0。· 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。

整体关系如下:

dom开始加载前所有花费时间=重定向时间+域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间pageLoadTime页面加载时间=域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间+解析dom花费时间+加载dom花费时间allLoadTime页面完全加载时间=重定向时间+域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间+解析dom花费时间+加载dom花费时间+执行onload事件花费时间resourcesLoadedTime资源加载时间=解析dom花费时间+加载dom花费时间

JS代码如下:

    function _performance(){      var REPORT_URL = "xxxx";      var perf = (window.webkitPerformance ? window.webkitPerformance : window.msPerformance ),         points = [‘navigationStart‘,‘unloadEventStart‘,‘unloadEventEnd‘,‘redirectStart‘,‘redirectEnd‘,‘fetchStart‘,‘domainLookupStart‘,‘connectStart‘,‘requestStart‘,‘responseStart‘,‘responseEnd‘,‘domLoading‘,‘domInteractive‘,‘domContentLoadedEventEnd‘,‘domComplete‘,‘loadEventStart‘,‘loadEventEnd‘];      var timing = pref.timing;      perf = perf  ? perf : window.performance;      if( perf  && timing ) {         var arr = [];         var navigationStart = timing[points[0]];         for(var i=0,l=points.length;i<l;i++){            arr[i] = timing[points[i]] - navigationStart;         }      var url = REPORT_URL + arr.join("-");      var img = new Image;      img.onload = img.onerror = function(){         img=null;      }      img.src = url;    }

 

 脚本错误收集:

    function error(msg,url,line){      var REPORT_URL = "xxxx"; // 收集上报数据的信息      var m =[msg, url, line, navigator.userAgent, +new Date];// 收集错误信息,发生错误的脚本文件网络地址,用户代理信息,时间      var url = REPORT_URL + m.join(‘||‘);// 组装错误上报信息内容URL      var img = new Image;      img.onload = img.onerror = function(){         img = null;      };      img.src = url;// 发送数据到后台cgi    }    // 监听错误上报    window.onerror = function(msg,url,line){      error(msg,url,line);    }

 

 

参考资料:

  • http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=210058186&idx=2&sn=565fd226cbb81e3fe85bf2ca6c61b844&scene=2&srcid=NwzHiRWso3Bd0PjPYIEg&from=timeline&isappinstalled=0#wechat_redirect

  • html5 performance cn

使用html5 window.preformance监控应用性能