上报相关performance对象初略介绍

概述

最近在作一个上报相关的需求,该需求指定上班的内容中包含页面记载的事件、请求花费的事件、以及DOM渲染所要完成的时间等。
为此查阅了大量的文档,收集了不少资料,因此趁热打铁,把本身所了解的记录下来,方便之后查询。javascript

performance对象介绍

浏览器暴露给js的一个接口,能够经过这个接口查看用户访问网站的链接创建时间、dns时间等信息。使用该api时须要在页面彻底加载完成以后才能使用,最简单的办法是在window.onload事件中读取各类数据,由于不少值必须在页面彻底加载以后才能得出。html

浏览器支持状况

IE9和chrome6以上的版本都支持:java

pc端android

  1. window.performance : ie9
  2. window.webkitPerformance : chrome6-9
  3. window.performance : chrome10+

移动端git

  1. 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 上报

相关文章
相关标签/搜索