Performance API - 支持应用程序内的客户端测量延迟时间

高精度时间标准定义了一个 Performance 接口,该接口支持应用程序内的客户端测量延迟时间。Performance 接口被认为是高精度的,因为它们精确到千分之一毫秒(受硬件或软件限制)。该接口支持许多用例,包括计算帧速率(在动画中可能很重要)和基准测试(例如加载资源的时间)。

由于平台的系统时钟受各种偏差(例如 NTP 调整)的影响,因此接口支持单调时钟,即始终增加的时钟。因此,Performance API 定义了一个 DOMHighResTimeStamp 类型,而不是使用 Date.now() 接口。

DOMHighResTimeStamp

DOMHighResTimeStamp 类型,顾名思义,代表一个高精度的时间点。该类型是一个 double ,由 Performance 接口使用。该值可以是离散时间点或两个离散时间点之间的时间差。

DOMHighResTimeStamp 的单位是毫秒,应该精确到 5 µs(微秒)。但是,如果浏览器无法提供精确到 5 微秒的时间值(例如,由于硬件或软件限制),浏览器可以将该值表示为精确到毫秒的毫秒时间。

方法

Performance 接口有两个方法。

now() 方法返回一个 DOMHighResTimeStamp,其值取决于导航开始和范围。如果范围是窗口,则该值是创建浏览器上下文的时间,如果范围是工作线程,则该值是创建工作线程的时间。

toJSON() 方法返回 Performance 对象的序列化,包含那些可以序列化的属性。

属性

Performance 接口有两个属性。

timing 属性返回一个 PerformanceTiming 对象,其中包含与延迟相关的性能信息,例如导航的开始时间、开始和结束时间重定向、响应的开始和结束时间等。

navigation 属性返回一个 PerformanceNavigation 对象,表示发生在给定浏览上下文中的导航类型,例如从历史记录导航到的页面,通过链接导航到的页面等。

接口

Performance

提供包含给定页面与时间相关的性能信息的方法和属性。

PerformanceEntry

提供了封装单个性能指标的方法和属性,是性能时间线的一部分。

PerformanceMark

条目类型为 “mark” 的性能条目的抽象接口。这种类型的条目是通过调用 performance.mark() 将命名的 DOMHighResTimeStamp(标记)添加到浏览器的性能时间线来创建的。

PerformanceMeasure

条目类型为 “measure” 的性能条目的抽象接口。这种类型的条目是通过调用 performance.measure() 在浏览器的性能时间线的两个标记之间添加一个命名的 DOMHighResTimeStamp(度量)来创建的。

PerformanceNavigationTiming

提供方法和属性来存储和检索高精度时间戳 或有关浏览器文档导航事件的指标。

PerformanceObserver

提供用于观察性能测量事件的方法和属性,并在浏览器的性能时间线中记录新的 性能条目 时收到通知。

PerformanceResourceTiming

提供用于检索和分析有关应用程序资源加载的详细网络计时数据的方法和属性。

规范

规范
High Resolution Time
Navigation Timing
Performance Timing
Resource Timing
User Timing

实现状态

Performance 接口的 浏览器兼容性 表中所示,桌面浏览器实现实现了这些接口中的大多数。

要测试浏览器对 Performance 接口的支持,请运行 perf-api-support 应用程序。

相关链接