Performance API

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

由于平台的系统时钟会受到各种时滞(例如NTP调整)的影响,该接口支持单调时钟,即一直增加的时钟。 鉴于这个原因,Performance API定义了DOMHighResTimeStamp类型,而不是使用Date.now()接口。

DOMHighResTimeStamp

DOMHighResTimeStamp类型,顾名思义,表示高采样率的时间戳。 此类型是 double ,由性能接口使用。 该值可以是离散时间戳,也可以是两个离散时间戳之间的时间间隔。

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

方法

Performance 接口具有两个方法。

now() 方法返回一个DOMHighResTimeStamp,其值取决于navigation start和作用域。如果作用域是window,则值是创建浏览器上下文的时间;如果作用域是worker,则值是创建worker的时间。

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

属性

Performance接口具有两个属性。

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

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

接口

Performance
提供方法和属性,包含给定页面与计时相关的性能信息。
PerformanceEntry
提供方法和属性,将单个性能指标封装为性能时间轴的一部分。
PerformanceFrameTiming
提供方法和属性,包含有关浏览器事件循环的帧计时数据。
PerformanceMark
条目类型为"mark"的PerformanceEntry抽象接口,该类型的条目通过调用mark()将命名的DOMHighResTimeStamp(mark)添加到浏览器的性能时间轴来创建。
PerformanceMeasure
条目类型为"measure"的PerformanceEntry抽象接口,该类型的条目通过调用measure()在浏览器的性能时间轴的两个标记之间添加一个命名的DOMHighResTimeStamp(measure)来创建。
PerformanceNavigationTiming
提供方法和属性,用于存储和检索有关浏览器文档导航事件的高采样率时间戳或其他指标。
PerformanceObserver
提供方法和属性,用于观察性能测量事件,并在浏览器的性能时间轴中记录新的PerformanceEntry时进行通知。
PerformanceResourceTiming
提供方法和属性,用于检索和分析有关应用程序资源加载的详细网络计时数据。

技术指标

技术指标 状态 备注
High Resolution Time Recommendation Initial definition.
High Resolution Time Level 2 Recommendation Adds performance attribute on Window and WorkerGlobalScope.
High Resolution Time Level 3 Editor's Draft Add timeOrigin property to Performance interface.
Frame Timing Draft Adds PerformanceFrameTiming interface.
Navigation Timing Recommendation Adds the PerformanceTiming and PerformanceNavigation interfaces. Adds timing and navigation properties to the Performance interface.
Navigation Timing Level 2 Working Draft Adds the PerformanceNavigationTiming interface. Obsolete's the the PerformanceTiming interface, the PerformanceNavigation interface, as well as the timing and navigation properties to the Performance interface.
Performance Timeline Recommendation Adds the PerformanceEntry interface, the PerformanceEntryList type, as well as the getEntries(), getEntriesByType(), and getEntriesByName() methods on the Performance interface.
Performance Timeline Level 2 Candidate Recommendation Adds serializer to the PerformanceEntry interface as well as adding the PerformanceObserver interface and callback
Resource Timing Level 1 Candidate Recommendation Adds the PerformanceResourceTiming interface. Adds the clearResourceTimings() method, the setResourceTimingBufferSize() method, and the onresourcetimingbufferfull event handler to the Performance interface. Also adds the Timing-Allow-Origin response header.
Resource Timing Level 2 Working Draft Adds the nextHopProtocol, workerStart, transferSize, encodedBodySize, and decodedBodySize properties to the PerformanceResourceTiming interface.
Resource Timing Level 3 Editor's Draft
User Timing Recommendation Adds mark(), clearMarks(), measure() and clearMeasures() methods to the Performance interface. Adds the PerformanceMark and PeformanceMeasure interfaces.
User Timing Level 2 Working Draft

实施状态

As shown in the Performance interface's Browser Compatibility table, most of these interfaces are broadly implemented by desktop browsers.

Performance接口的“浏览器兼容性”表所示,大部分接口由桌面浏览器广泛实现。

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

另见