概述
最近在作一个上报相关的需求,该需求指定上班的内容中包含页面记载的事件、请求花费的事件、以及DOM渲染所要完成的时间等。
为此查阅了大量的文档,收集了不少资料,因此趁热打铁,把本身所了解的记录下来,方便之后查询。javascript
performance对象介绍
浏览器暴露给js的一个接口,能够经过这个接口查看用户访问网站的链接创建时间、dns时间等信息。使用该api时须要在页面彻底加载完成以后才能使用,最简单的办法是在window.onload事件中读取各类数据,由于不少值必须在页面彻底加载以后才能得出。html
浏览器支持状况
IE9和chrome6以上的版本都支持:java
pc端android
- window.performance : ie9
- window.webkitPerformance : chrome6-9
- window.performance : chrome10+
移动端git
- android4.0
performance是ECMAScript5中新增的一个特性,对于该特性,所支持的浏览器并很少。github
属性和方法
属性
-
performance.timing
:performance对象的timing属性指向一个对象,它包含了各类与浏览器性能有关的时间数据,提供浏览器处理网页各个阶段的耗时,这也是本文介绍的重点。
-
performance.navigation
:网页导航的相关对象。
-
performance.memory
:浏览器内存状况相关对象。
方法
-
performance.getEntries
:浏览器获取网页时,会对网页中每个对象(脚本文件、样式表、图片文件等等)发出一个HTTP请求。
-
performance.mark
:mark方法用于为相应的视点作标记。
-
performance.now
:performance.now方法返回当前网页自从performance.timing.navigationStart到当前时间之间的微秒数(毫秒的千分之一)
上报相关内容
上报相关的内容,大部分在performance.timing
里面,performance.timing
中包含的属性有:web
- navigationStart:准备加载新页面的起始时间
- redirectStart:若是发生了HTTP重定向,而且从导航开始,中间的每次重定向,都和当前文档同域的话,就返回开始重定向的timing.fetchStart的值。其余状况,则返回0
- redirectEnd:若是发生了HTTP重定向,而且从导航开始,中间的每次重定向,都和当前文档同域的话,就返回最后一次重定向,接收到最后一个字节数据后的那个时间.其余状况则返回0
- fetchStart:若是一个新的资源获取被发起,则 fetchStart必须返回用户代理开始检查其相关缓存的那个时间,其余状况则返回开始获取该资源的时间
- domainLookupStart:返回用户代理对当前文档所属域进行DNS查询开始的时间。若是此请求没有DNS查询过程,如长链接,资源cache,甚至是本地资源等。 那么就返回 fetchStart的值
- domainLookupEnd:返回用户代理对结束对当前文档所属域进行DNS查询的时间。若是此请求没有DNS查询过程,如长链接,资源cache,甚至是本地资源等。那么就返回 fetchStart的值
- connectStart:返回用户代理向服务器服务器请求文档,开始创建链接的那个时间,若是此链接是一个长链接,又或者直接从缓存中获取资源(即没有与服务器创建链接)。则返回domainLookupEnd的值
-(secureConnectionStart):可选特性。用户代理若是没有对应的东东,就要把这个设置为undefined。若是有这个东东,而且是HTTPS协议,那么就要返回开始SSL握手的那个时间。 若是不是HTTPS, 那么就返回0
- connectEnd:返回用户代理向服务器服务器请求文档,创建链接成功后的那个时间,若是此链接是一个长链接,又或者直接从缓存中获取资源(即没有与服务器创建链接)。则返回domainLookupEnd的值
- requestStart:返回从服务器、缓存、本地资源等,开始请求文档的时间
- responseStart:返回用户代理从服务器、缓存、本地资源中,接收到第一个字节数据的时间
- responseEnd:返回用户代理接收到最后一个字符的时间,和当前链接被关闭的时间中,更早的那个。一样,文档可能来自服务器、缓存、或本地资源
- domLoading:返回用户代理把其文档的 "current document readiness" 设置为 "loading"的时候
- domInteractive:返回用户代理把其文档的 "current document readiness" 设置为 "interactive"的时候.
- domContentLoadedEventStart:返回文档发生 DOMContentLoaded事件的时间
- domContentLoadedEventEnd:文档的DOMContentLoaded 事件的结束时间
- domComplete:返回用户代理把其文档的 "current document readiness" 设置为 "complete"的时候
- loadEventStart:文档触发load事件的时间。若是load事件没有触发,那么该接口就返回0
- loadEventEnd:文档触发load事件结束后的时间。若是load事件没有触发,那么该接口就返回0
上报的内容
上报的内容是经过上面的performance.timing
各个属性的差值组成的,经常使用的有:chrome
- DNS查询耗时 :domainLookupEnd - domainLookupStart
- TCP连接耗时 :connectEnd - connectStart
- request请求耗时 :responseEnd - responseStart
- 解析dom树耗时 : domComplete - domInteractive
- 白屏时间 :responseStart - navigationStart
- domready时间 :domContentLoadedEventEnd - navigationStart
- onload时间 :loadEventEnd - navigationStart
帮助文档
performance对象:高精度时间戳api
window.performance 详解浏览器
使用简洁的 Navigation Timing API 测试网页加载速度(不彻底译文)
Chrome Developer Tools之网络监控与调优
关键字搜索:performance.timing 、performance 上报