PerformanceObserver()

PerformanceObserver() 构造函数使用给定的观察者回调创建一个新的 PerformanceObserver 对象。

当通过 observe() 方法为已注册的条目类型记录性能条目事件时,将调用观察者回调。

语法

new PerformanceObserver(callback)

例子

const observer = new PerformanceObserver((list, obj) => {
  const entries = list.getEntries();
  for (let i=0; i < entries.length; i++) {
    // Process "mark" and "frame" events
  }
});
observer.observe({entryTypes: ["mark", "frame"]});

function perf_observer(list, observer) {
  // Process the "measure" event
}
const observer2 = new PerformanceObserver(perf_observer);
observer2.observe({entryTypes: ["measure"]});

属性

entries 是 PerformanceEntry,对应的属性如下:

duration 持续时间
entryType 类型名称
name 名称
startTime 开始时间

支持的明细类型

获取所有支持的类型

PerformanceObserver.supportedEntryTypes

// returns ["element", "event", "first-input", "largest-contentful-paint", "layout-shift", "longtask", "mark", "measure", "navigation", "paint", "resource"] in Chrome 89

检查不支持的类型

以下函数检查是否支持一组可能的条目类型。

不受支持的类型会记录到控制台,但是可以将此信息记录到客户端分析以指示无法观察到特定类型。

function detectSupport(entryTypes) {
  for (const entryType of entryTypes) {
    if (!PerformanceObserver.supportedEntryTypes.includes(entryType)) {
      console.log(entryType);
    }
  }
}

detectSupport(["resource", "mark", "frame"]);

EventType 介绍

各种支持的类型,是什么意思呢?

value desc
element 报告元素的加载时间。
navigation 文档的地址。
resource 请求资源的解析 URL。 即使请求被重定向,该值也不会改变。
mark 通过调用 performance.mark() 创建标记时使用的名称。
measure 通过调用 performance.measure() 创建度量时使用的名称。
paint ‘first-paint’或’first-contentful-paint’。
longtask 报告长任务的实例

参考资料

https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/PerformanceObserver

https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserverEntryList

https://developer.mozilla.org/zh-CN/docs/Web/API/PerformanceObserver/PerformanceObserver

https://w3c.github.io/performance-timeline/#abstract

https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/entryType