performance.timing
各种与浏览器性能有关的时间数据,提供浏览器处理网页各个阶段的耗时
performance.timing 对象
- performance.timing.navigationStart:当前浏览器窗口的前一个网页关闭,发生 unload 事件时的 Unix 毫秒时间戳。如果没有前一个网页,则等于 fetchStart 属性。
- performance.timing.unloadEventStart:如果前一个网页与当前网页属于同一个域名,则返回前一个网页的 unload 事件发生时的 Unix 毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为 0。
- performance.timing.unloadEventEnd:如果前一个网页与当前网页属于同一个域名,则返回前一个网页 unload 事件的回调函数结束时的 Unix 毫秒时间戳。如果没有前一个网页,或者之前的网页跳转不是在同一个域名内,则返回值为 0。
- performance.timing.redirectStart:返回第一个 HTTP 跳转开始时的 Unix 毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为 0。
- performance.timing.redirectEnd:返回最后一个 HTTP 跳转结束时(即跳转回应的最后一个字节接受完成时)的 Unix 毫秒时间戳。如果没有跳转,或者不是同一个域名内部的跳转,则返回值为 0。
- performance.timing.fetchStart:返回浏览器准备使用 HTTP 请求读取文档时的 Unix 毫秒时间戳。该事件在网页查询本地缓存之前发生。
- performance.timing.domainLookupStart:返回域名查询开始时的 Unix 毫秒时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于 fetchStart 属性的值。
- performance.timing.domainLookupEnd:返回域名查询结束时的 Unix 毫秒时间戳。如果使用持久连接,或者信息是从本地缓存获取的,则返回值等同于 fetchStart 属性的值。
- performance.timing.connectStart:返回 HTTP 请求开始向服务器发送时的 Unix 毫秒时间戳。如果使用持久连接(persistent connection),则返回值等同于 fetchStart 属性的值。
- performance.timing.connectEnd:返回浏览器与服务器之间的连接建立时的 Unix 毫秒时间戳。如果建立的是持久连接,则返回值等同于 fetchStart 属性的值。连接建立指的是所有握手和认证过程全部结束。
- performance.timing.secureConnectionStart:返回浏览器与服务器开始安全链接的握手时的 Unix 毫秒时间戳。如果当前网页不要求安全连接,则返回 0。
- performance.timing.requestStart:返回浏览器向服务器发出 HTTP 请求时(或开始读取本地缓存时)的 Unix 毫秒时间戳。
- performance.timing.responseStart:返回浏览器从服务器收到(或从本地缓存读取)第一个字节时的 Unix 毫秒时间戳。
- performance.timing.responseEnd:返回浏览器从服务器收到(或从本地缓存读取)最后一个字节时(如果在此之前 HTTP 连接已经关闭,则返回关闭时)的 Unix 毫秒时间戳。
- performance.timing.domLoading:返回当前网页 DOM 结构开始解析时(即 Document.readyState 属性变为“loading”、相应的 readystatechange 事件触发时)的 Unix 毫秒时间戳。
- performance.timing.domInteractive:返回当前网页 DOM 结构结束解析、开始加载内嵌资源时(即 Document.readyState 属性变为“interactive”、相应的 readystatechange 事件触发时)的 Unix 毫秒时间戳。
- performance.timing.domContentLoadedEventStart:返回当前网页 DOMContentLoaded 事件发生时(即 DOM 结构解析完毕、所有脚本开始运行时)的 Unix 毫秒时间戳。
- performance.timing.domContentLoadedEventEnd:返回当前网页所有需要执行的脚本执行完成时的 Unix 毫秒时间戳。
- performance.timing.domComplete:返回当前网页 DOM 结构生成时(即 Document.readyState 属性变为“complete”,以及相应的 readystatechange 事件发生时)的 Unix 毫秒时间戳。
- performance.timing.loadEventStart:返回当前网页 load 事件的回调函数开始时的 Unix 毫秒时间戳。如果该事件还没有发生,返回 0。
- performance.timing.loadEventEnd:返回当前网页 load 事件的回调函数运行结束时的 Unix 毫秒时间戳。如果该事件还没有发生,返回 0。
performance 中的方法
performance.now()
performance.now 方法返回当前网页自从 performance.timing.navigationStart 到当前时间之间的微秒数(毫秒的千分之一)。也就是说,它的精度可以达到 100 万分之一秒
performance.mark() mark 方法用于为相应的视点做标记。
clearMarks 方法用于清除标记,如果不加参数,就表示清除所有标记。
performance.getEntries()
以数组形式,返回这些请求的时间统计信息,有多少个请求,返回数组就会有多少个成员。
performance.getEntriesByType()
函数通过类型获取对应的标记
performance.navigation.type
表示网页的加载来源
- 0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数 performance.navigation.TYPE_NAVIGATENEXT。
- 1:网页通过“重新加载”按钮或者 location.reload()方法加载,相当于常数 performance.navigation.TYPE_RELOAD。
- 2:网页通过“前进”或“后退”按钮加载,相当于常数 performance.navigation.TYPE_BACK_FORWARD。
- 255:任何其他来源的加载,相当于常数 performance.navigation.TYPE_UNDEFINED。
performance.navigation.redirectCount
当前网页经过了多少次重定向跳
performance 的 demo
- 计算一个图片的加载时间
<body>
<img src="https://pic3.zhimg.com/80/v2-3f18b42f1f7335958072d36641862afa_hd.jpg" />
<script type="text/javascript">
var measure_start = performance.now();
document.getElementsByTagName("img")[0].addEventListener(
"load",
function() {
var measure_end = performance.now();
console.log("image load time: " + (measure_end - measure_start) + "ms");
},
false
);
</script>
</body>
<!-- image load time: 3.8949999725446105ms -->
- 获取所有的标记或者测量结果
performance.mark("start");
performance.mark("end");
performance.measure("difference", "start", "end");
var marks = performance.getEntriesByType("mark");
var measures = performance.getEntriesByType("measure");
console.log("===marks===:");
marks.forEach(function(mark) {
console.log(mark.name + ": " + mark.startTime);
});
console.log("===measures===:");
measures.forEach(function(measure) {
console.log(measure.name + ": " + measure.duration);
});
// ===marks===:
// start: 20351.0950000491
// end: 20351.099999970756
// ===measures===:
// difference: 0.004999921657145023
- 外部资源加载的耗时
performance.getEntriesByType("resource").forEach(function(r) {
console.log(r.name + ": " + r.duration);
});
// https://pic3.zhimg.com/80/v2-3f18b42f1f7335958072d36641862afa_hd.jpg: 2.740000025369227
- clearMarks 删除之前创建的标记
performance.clearMarks();
performance.mark("start");
performance.mark("end");
var marks = performance.getEntriesByType("mark");
console.log("before clear:");
marks.forEach(function(mark) {
console.log(mark.name + ": " + mark.startTime);
});
performance.clearMarks("start");
marks = performance.getEntriesByType("mark");
console.log("after clear:");
marks.forEach(function(mark) {
console.log(mark.name + ": " + mark.startTime);
});
// before clear:
// start: 2388638.3650000207
// end: 2388638.4000000544
// after clear:
// end: 2388638.4000000544
参考
Performance API https://www.infoq.cn/article/html5-performance-api-monitoring
使用 HMTL5 API 监控前端性能 https://www.kancloud.cn/dennis/tgjavascript/241845

确认评论邮箱
邀请制评论