PerformanceEntry: navigationId property

The navigationId read-only property of the PerformanceEntry interface returns the ID of the navigation that this paint happened under.

Value

An integer that can be matched to a corresponding PerformanceNavigationTiming or PerformanceSoftNavigation entry.

Description

Using PerformanceSoftNavigation entries, you can measure when Soft Navigations happened without hooking into the code that made the soft navigation.

This enables slicing the performance timeline used by the performance APIs to attribute performance measures to the navigation they occurred under. As performance entries are emitted after the fact and may be delayed, they may relate to previous navigations; you cannot assume they relate to the current URL. The navigationId indicates which navigation the entry happened under.

During Soft Navigations, paints that happen before the URL is updated will have a navigationId that references the location being navigated from. When measuring the Largest Contentful Paint (LCP) of an in-flight soft navigation, you will likely want to associate it with the location being navigated to. For the LCP case, PerformanceSoftNavigation.getLargestInteractionContentfulPaint() and InteractionContentfulPaint.interactionId are more effective at considering all relevant paints regardless of the navigationId when calculating that metric.

Examples

Logging the navigationId of the soft navigation

This example uses a PerformanceObserver to log new soft-navigation performance entries as they are recorded in the browser's performance timeline. The buffered option is used to access entries from before the observer creation.

js
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    console.log("Soft Nav:", entry.startTime, entry.navigationId);
  }
});
observer.observe({ type: "soft-navigation", buffered: true });

Specifications

Specification
Performance Timeline
# dom-performanceentry-navigationid
Soft Navigations and Interaction Contentful Paint
# dom-performanceentry-navigationid

Browser compatibility