PerformanceLongTaskTiming

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

PerformanceLongTaskTiming 接口提供有关占用 UI 线程 50 毫秒或更长时间的任务的信息。

描述

阻塞主线程 50 毫秒或更长时间的长任务会导致以下问题(除其他问题外)

  • 延迟的 交互时间 (TTI)。
  • 高/可变输入延迟。
  • 高/可变事件处理延迟。
  • 动画和滚动卡顿。

长任务是指任何一段连续期间,其中主 UI 线程繁忙时间达到 50 毫秒或更长。常见示例包括:

  • 长时间运行的事件处理程序。
  • 代价高昂的重排和其他重新渲染。
  • 浏览器在事件循环的不同轮次之间执行的工作超过 50 毫秒。

长任务指的是“罪魁祸首浏览上下文容器”,简称“容器”,即任务发生在其中的顶级页面、<iframe><embed><object>

对于不在顶级页面内发生的以及确定哪个容器负责长任务的任务,TaskAttributionTiming 接口提供了 containerIdcontainerNamecontainerSrc 属性,这些属性可能提供有关任务来源的更多信息。

继承

实例属性

此接口通过以下方式限定长任务计时性能条目类型的以下 PerformanceEntry 属性来扩展它们:

PerformanceEntry.duration 只读 实验性

返回一个 DOMHighResTimeStamp,表示任务开始和结束之间经过的时间,精确到 1 毫秒。

PerformanceEntry.entryType 只读 实验性

始终返回 "longtask"

PerformanceEntry.name 只读 实验性

返回以下字符串之一,指的是可归因于长任务的浏览上下文或框架:

  • "cross-origin-ancestor"
  • "cross-origin-descendant"
  • "cross-origin-unreachable"
  • "multiple-contexts"
  • "same-origin-ancestor"
  • "same-origin-descendant"
  • "same-origin"
  • "self"
  • "unknown"
PerformanceEntry.startTime 只读 实验性

返回一个 DOMHighResTimeStamp,表示任务开始的时间。

此接口还支持以下属性:

PerformanceLongTaskTiming.attribution 只读 实验性

返回一个 TaskAttributionTiming 实例的序列。

实例方法

PerformanceLongTaskTiming.toJSON() 实验性

返回 PerformanceLongTaskTiming 对象的 JSON 表示形式。

示例

获取长任务

要获取长任务计时信息,请创建一个 PerformanceObserver 实例,然后调用其 observe() 方法,将 "longtask" 作为 type 选项的值传递给它。您还需要将 buffered 设置为 true 以访问用户代理在构建文档时缓冲的长任务。然后,PerformanceObserver 对象的回调将被调用,其中包含一个 PerformanceLongTaskTiming 对象列表,您可以分析这些对象。

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    console.log(entry);
  });
});

observer.observe({ type: "longtask", buffered: true });

规范

规范
长任务 API
# sec-PerformanceLongTaskTiming

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅