v139 · Origin Trial · Performance
SoftNavigation Performance Entry
A new PerformanceEntry type for Single-Page Application route changes. Each client-side navigation produces a SoftNavigationEntry with its own navigationId — unlocking per-navigation Core Web Vitals for SPAs.
SoftNavigationHeuristics origin trial or chrome://flags/#soft-navigation-heuristics. Demos simulate the API output when the flag is not enabled.
concepts
-
SPA Navigation Observer
Wire a
PerformanceObserverto the'soft-navigation'entry type. Trigger simulated SPA route changes and watch eachSoftNavigationEntryarrive with itsinteractionId,navigationId, URL, and timing fields. -
Core Web Vitals Dashboard
See how the
navigationIdon aSoftNavigationEntryacts as a correlation key for LCP, INP, and CLS entries — enabling accurate, per-route Web Vitals measurement across a multi-page SPA session. -
Multi-Page Comparison
Navigate a simulated SPA and watch each route change produce a distinct
SoftNavigationEntryin the timeline — separate from the initial hard navigation, each with its ownnavigationId, start time, and LCP attribution. -
Observer Playground
Three live PerformanceObservers wired up:
soft-navigation,largest-contentful-paint, andevent. Navigate the toy SPA on the left and watch the navigationId tie everything together.
why it shipped
Single-Page Applications handle routing in JavaScript — the browser never fires a traditional navigation event. This meant Core Web Vitals (LCP, INP, CLS) were only measured for the initial page load, making it impossible for SPA developers to understand performance for routes that users visit after the first one. SoftNavigation performance entries solve this by giving each client-side navigation its own stable identifier that LCP, INP, and CLS entries can reference, so real-user monitoring tools can report accurate, per-route vitals for any SPA — React Router, Next.js, Nuxt, Svelte Kit, or hand-rolled.