PerformanceNavigationTiming: domInteractive property

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2021.

The domInteractive read-only property returns a DOMHighResTimeStamp representing the time immediately before the user agent sets the document's readyState to "interactive".

Note: This property is not Time to interactive (TTI). This property refers to the time when DOM construction is finished and interaction to it from JavaScript is possible. See also the interactive state of Document.readyState which corresponds to this property.

Measuring DOM processing time may not be consequential unless your site has a very large HTML source to a construct a Document Object Model from.

If there is no parser-blocking JavaScript then the DOMContentLoaded event (see domContentLoadedEventStart for the timestamp) will fire immediately after domInteractive.

Value

A DOMHighResTimeStamp representing the time immediately before the user agent sets the document's readyState to "interactive".

Examples

Logging DOM interaction time

The domInteractive property can be used to log the time when the DOM construction has finished and interaction with it is possible.

Example using a PerformanceObserver, which notifies of new navigation performance entries as they are recorded in the browser's performance timeline. Use the buffered option to access entries from before the observer creation.

js
const observer = new PerformanceObserver((list) => {
  list.getEntries().forEach((entry) => {
    console.log(
      `${entry.name}: domInteractive time: ${entry.domInteractive}ms`,
    );
  });
});

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

Example using Performance.getEntriesByType(), which only shows navigation performance entries present in the browser's performance timeline at the time you call this method:

js
const entries = performance.getEntriesByType("navigation");
entries.forEach((entry) => {
  console.log(`${entry.name}: domInteractive time: ${entry.domInteractive}ms`);
});

Specifications

Specification
Navigation Timing Level 2
# dom-performancenavigationtiming-dominteractive

Browser compatibility

BCD tables only load in the browser

See also