通过PerformanceObserver来统计FP/FCP

53fc6d34bd3a76a32857aab69cd2796e.png

PerformanceObserver 是一个用于监控浏览器性能的接口,可以用来收集各种与性能相关的信息。通过 PerformanceObserver,你可以订阅各种性能条目,比如资源加载、用户输入延迟等,并在这些性能条目发生变化时得到通知。

下面是一个简单的示例,展示如何使用 PerformanceObserver 监控页面加载性能:

// 创建一个 PerformanceObserver 实例
const observer = new PerformanceObserver((list) => {
    list.getEntries().forEach(entry => {
        console.log(entry.name + ' ' + entry.duration);
    });
});


// 配置要观察的性能条目类型
observer.observe({ entryTypes: ['navigation'] });

在这个示例中,我们首先创建了一个 PerformanceObserver 实例,然后通过 observe() 方法指定要观察的性能条目类型为 'navigation',表示我们要监控页面导航相关的性能数据。

当页面加载完成后,PerformanceObserver 会触发回调函数,其中的 list 参数包含了一个 PerformanceEntryList 对象,我们可以通过 list.getEntries() 方法获取到各种性能条目的信息,比如加载时间、资源加载时间等。

84de7b9f9a617c07d55abd7e26660ffa.png

你可以根据具体的需求配置不同的 entryTypes,比如 'resource''paint' 等,来监控不同类型的性能数据。通过 PerformanceObserver,你可以更加精细地监控页面性能,以便进行性能优化和调试。

FP/FCP

要通过PerformanceObserver来统计首次绘制(First Paint,FP)和首次内容绘制(First Contentful Paint,FCP),可以使用以下步骤:

1、 创建一个新的PerformanceObserver实例,并指定要观察的entryTypes为"paint"。这样可以捕获与绘制相关的性能条目。

2、 在PerformanceObserver的回调函数中,遍历观察到的性能条目(PerformanceEntry对象),并根据条目的name属性来判断是FP还是FCP。

3、 记录FP和FCP的时间戳,可以通过PerformanceEntry对象的startTime属性来获取。

下面是一个简单的示例代码,演示如何使用PerformanceObserver来统计FP和FCP:

// 创建一个新的PerformanceObserver实例
const observer = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  entries.forEach(entry => {
    if (entry.name === 'first-paint') {
      console.log('First Paint:', entry.startTime);
    } else if (entry.name === 'first-contentful-paint') {
      console.log('First Contentful Paint:', entry.startTime);
    }
  });
});


// 启动PerformanceObserver并指定观察的entryTypes为'paint'
observer.observe({ entryTypes: ['paint'] });

在上面的代码中,我们创建了一个PerformanceObserver实例,指定观察的entryTypes为'paint',然后在回调函数中判断每个性能条目的name属性,以区分FP和FCP,并打印它们的时间戳。

d24ed302d54108c1532a21da85f0ad8c.png

通过这种方式,你可以使用PerformanceObserver来捕获和统计页面的FP和FCP时间,从而更好地了解页面加载性能。

总结

在使用PerformanceObserver接口监控页面性能时,entryTypes参数用于指定要观察的性能条目类型。这个参数接受一个字符串数组,其中包含要监视的性能条目类型。以下是一些常见的性能条目类型及其用法:

1、 navigation:用于监视导航相关的性能条目,如页面加载时间、重定向次数等。

const observer = new PerformanceObserver((list) => {
       const entries = list.getEntriesByType('navigation');
       entries.forEach(entry => {
           console.log(entry);
       });
   });


   observer.observe({ entryTypes: ['navigation'] });

2、 resource:用于监视页面加载的资源(如图片、脚本、样式表等)的性能条目。

const observer = new PerformanceObserver((list) => {
       const entries = list.getEntriesByType('resource');
       entries.forEach(entry => {
           console.log(entry);
       });
   });


   observer.observe({ entryTypes: ['resource'] });

3、 paint:用于监视页面绘制相关的性能条目,如首次绘制(FP)、首次内容绘制(FCP)等。

const observer = new PerformanceObserver((list) => {
       const entries = list.getEntriesByType('paint');
       entries.forEach(entry => {
           console.log(entry);
       });
   });


   observer.observe({ entryTypes: ['paint'] });

4、 longtask:用于监视长任务(Long Tasks)的性能条目,这些任务可能会影响页面的响应性能。

const observer = new PerformanceObserver((list) => {
       const entries = list.getEntriesByType('longtask');
       entries.forEach(entry => {
           console.log(entry);
       });
   });


   observer.observe({ entryTypes: ['longtask'] });

通过指定不同的entryTypes,您可以针对特定类型的性能条目进行监视和分析,从而更好地了解页面加载和性能瓶颈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PPS(Programmable Power Supply)是一种快充协议,它允许设备和充电器之间进行动态协商,以确定最佳的充电电压和电流。通过PPS,设备可以根据自身需求调整充电参数,以实现更快速、高效的充电。 PD(Power Delivery)是一种快充协议,它通过使用USB Type-C接口,支持高功率传输和双向通信。PD协议可以提供更高的功率输出,以满足不同设备的充电需求,并支持多种电压和电流组合。 QC(Quick Charge)是一种由高通公司开发的快充协议。它通过在充电器和设备之间进行通信,实现了更快速的充电速度。QC协议可以根据设备的需求提供不同的电压和电流输出,以实现快速充电。 AFC(Adaptive Fast Charging)是三星公司开发的一种快充协议。它通过在充电器和设备之间进行通信,根据设备的需求提供合适的电压和电流输出,以实现快速充电。 FCP(Fast Charging Protocol)是华为公司开发的一种快充协议。它通过在充电器和设备之间进行通信,根据设备的需求提供合适的电压和电流输出,以实现快速充电。 SCP(Super Charge Protocol)是华为公司开发的一种快充协议。它是华为早期的快充技术,通过在充电器和设备之间进行通信,提供高功率输出,以实现快速充电。 PE(Power Exchange)是一种快充协议,用于USB Type-C接口的充电。它通过在充电器和设备之间进行通信,协商合适的电压和电流输出,以实现快速充电。 SFCP(Super Fast Charging Protocol)是OPPO公司开发的一种快充协议。它通过在充电器和设备之间进行通信,根据设备的需求提供合适的电压和电流输出,以实现超快速充电。 至于读取芯片的ID,这取决于具体的芯片和协议。有些快充协议可能支持读取芯片的ID,以实现更精确的充电控制和保护机制,但并不是所有协议都支持这个功能。具体是否支持读取芯片的ID,需要查看相关协议的规范和设备的技术文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值