【监控】如何监控资源加载时长
如何监控资源加载时长
相关文章
如何监控资源加载时长
一、使用Performance API
Performance 接口是 Web Performance API 的一部分,它允许开发者访问有关当前页面性能的信息。这些信息包括页面加载时间、资源加载时间、执行时间等。
Performance接口
- window.performance对象是Performance API的入口点,它提供了各种方法和属性来测量和记录页面性能数据。
- performance.timing属性返回一个包含了从导航开始到各种事件发生的时间戳的对象,可以通过这些时间戳来计算页面各个阶段的性能指标,比如DNS解析时间、TCP连接时间、DOM加载时间等。
- performance.now()方法返回一个DOMHighResTimeStamp值,表示从页面加载开始到调用该方法时经过的毫秒数,通常用于测量代码执行时间。
二、监控onload事件之前的所有资源
这段代码会在页面加载完成后,遍历所有的资源(比如图片、样式表、脚本等),并输出它们的加载时间信息到浏览器的控制台中。
1 |
|
三、监听onload事件之后的所有资源
这段代码会创建一个PerformanceObserver对象,并使用observer.observe({ entryTypes: [‘resource’] })方法开始监控新资源的加载情况。当有新资源加载时,会触发回调函数,并输出资源的加载时间信息到控制台中。
1 |
|
四、其他entryTypes
navigation:用于观察导航相关的性能条目,比如页面加载、重定向等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 创建一个新的 PerformanceObserver 对象
var observer = new PerformanceObserver(function(list) {
// 获取所有导航相关的性能条目
var entries = list.getEntries();
entries.forEach(function(entry) {
console.log('导航类型:', entry.entryType);
console.log('导航开始时间:', entry.startTime);
console.log('重定向时间:', entry.redirectEnd - entry.redirectStart);
console.log('DNS 解析时间:', entry.domainLookupEnd - entry.domainLookupStart);
console.log('TCP 连接时间:', entry.connectEnd - entry.connectStart);
console.log('服务器响应时间:', entry.responseStart - entry.requestStart);
console.log('DOM 加载时间:', entry.domContentLoadedEventStart - entry.startTime);
console.log('页面加载时间:', entry.loadEventStart - entry.startTime);
});
});
// 监听导航性能的性能条目
observer.observe({ entryTypes: ['navigation'] });paint:用于观察绘制相关的性能条目,比如首次绘制时间、首次内容绘制时间等。
1
2
3
4
5
6
7
8
9
10
11
12
13// 创建一个新的 PerformanceObserver 对象
var observer = new PerformanceObserver(function(list) {
// 获取所有绘制相关的性能条目
var entries = list.getEntries();
entries.forEach(function(entry) {
console.log('绘制类型:', entry.entryType);
console.log('绘制开始时间:', entry.startTime);
console.log('绘制持续时间:', entry.duration);
});
});
// 监听绘制性能的性能条目
observer.observe({ entryTypes: ['paint'] });longtask:用于观察长任务相关的性能条目,比如 JavaScript 主线程上超过 50 毫秒的任务。
1
2
3
4
5
6
7
8
9
10
11
12
13// 创建一个新的 PerformanceObserver 对象
var observer = new PerformanceObserver(function(list) {
// 获取所有长任务相关的性能条目
var entries = list.getEntries();
entries.forEach(function(entry) {
console.log('长任务类型:', entry.entryType);
console.log('长任务开始时间:', entry.startTime);
console.log('长任务持续时间:', entry.duration);
});
});
// 监听长任务性能的性能条目
observer.observe({ entryTypes: ['longtask'] });largest-contentful-paint:用于观察最大内容渲染时间,即页面上最大的可见内容绘制的时间。
1
2
3
4
5
6
7
8
9
10
11
12// 创建一个新的 PerformanceObserver 对象
var observer = new PerformanceObserver(function(list) {
// 获取所有最大内容渲染时间相关的性能条目
var entries = list.getEntries();
entries.forEach(function(entry) {
console.log('最大内容渲染时间类型:', entry.entryType);
console.log('最大内容渲染时间:', entry.startTime);
});
});
// 监听最大内容渲染时间性能的性能条目
observer.observe({ entryTypes: ['largest-contentful-paint'] });element:用于观察特定元素的性能条目,比如通过 PerformanceElementTiming 接口获取特定元素的加载时间等。
1
2
3
4
5
6
7
8
9
10
11
12
13// 创建一个新的 PerformanceObserver 对象
var observer = new PerformanceObserver(function(list) {
// 获取所有特定元素的性能条目
var entries = list.getEntries();
entries.forEach(function(entry) {
console.log('元素ID:', entry.identifier);
console.log('元素加载开始时间:', entry.startTime);
console.log('元素加载结束时间:', entry.loadTime);
});
});
// 监听特定元素的性能条目
observer.observe({ type: 'element', buffered: true });
喜欢这篇文章?打赏一下支持一下作者吧!
【监控】如何监控资源加载时长
https://www.cccccl.com/20230201/监控/如何监控资源加载时长/