Back to Chromium

Soft Navigation Heuristics Changelog

docs/speed/metrics_changelog/soft_navigations.md

149.0.7827.27.7 KB
Original Source

Soft Navigation Heuristics Changelog

This is a list of changes to Soft Navigation Heuristics.

  • Chrome 148

    • Metric bug fix: Use correct NavigationId for InteractionContentfulPaint entries (59bc92edc430c).
  • Chrome 147 (Major changes after origin trial expired & preparing to extend OT for 3 milestones)

    • InteractionContentfulPaint decoupled from SoftNavigationEntry and reported for all interactions.
      • InteractionContentfulPaint entries now emit as soon as they occur, for any interaction, rather than waiting for a Soft Navigation to become detected first (e8815d0acaf2f).
      • The same semantics used to measure soft-navigation loading performance can be used to measure any dynamic content updates, even when the URL doesn't change.
    • SoftNavigationEntry adds largestInteractionContentfulPaint attribute.
      • SoftNavigationEntry entries now report a largestInteractionContentfulPaint attribute. Because InteractionContentfulPaint entries are now decoupled from soft-navigations, this makes it more convenient to track soft-LCP for soft navs, specifically.
    • Aligned "Interaction Detection" with INP.
      • Changed the implementation to reuse the existing Event Timing API mechanism for detecting interactions.
      • To accomplish this, added support for measuring Event Timing for navigate, popstate, and hashchange events (c6a49e314dfb5), however, these Event Timing entry types are not yet exposed to the performance timeline.
      • Added interactionId attribute to InteractionContentfulPaint and SoftNavigationEntry performance entries (704c0222f53a3).
    • Added support for replaceState.
      • Added support for triggering soft navigations on replaceState (in addition to pushState).
      • Exposed the navigationType (279eb27b6d2bb).
    • Refined TimeOrigin (to measure more time).
      • Previously, TimeOrigin was a complicated value, something akin to min(processingEnd, urlChangeTime) and was meant to match hard-navs cross-document navigationStart, but this model proved confusing and undesired.
      • Changed InteractionContentfulPaint and SoftNavigationEntry to report startTime equal to Interaction startTime (12b7e08417957).
    • Other implementation changes:
      • Set up paint tracking for inline style and class attribute changes (50dc1d52a77ca).
      • Improved browser-side soft navigations tracking (a431cb877c128).
  • Chrome 140 - 144 (Addressing bugs during origin trial)

    • Metric bug fix: Refactor pending InteractionContentfulPaint entry buffering (abe0507666c40).
    • Metric bug fix: Ensured correct navigation ID is used for entries from SoftNavigationContext (5bdc6551839e7).
    • Metric bug fix: Improve recording soft navigations in UKM (correct URL) (5c510d4ea6310).
    • Metric bug fix: Fixed browser-initiated intercepted back navigations (b0c3c8bac14d0).
  • Chrome 139 (Major revamp completed & new origin trial started)

    • Major revamp of Soft Navigation Heuristics.
    • Each Interaction now has independent painted area tracking.
      • Moved painted area tracking into each Context (a2a9986393624) and removed the global "Initial area" requirement (7321c9f17fd69).
      • Explicitly supported dynamic content updates (in PaintTimingDetectors), rather than the need to "reset LCP" (e6d3c7c1267d7).
    • Introduced InteractionContentfulPaint PerformanceEntry.
      • Added the InteractionContentfulPaint entry to observe paint timings directly tied to interactions (88847f08dc064). This replaces "soft" LCP entries and removes the need for includeSoftNavigationObservations flag.
      • Each interaction will stop soft-LCP attribution at the first discrete input or scroll (cbb9d4e7c5eb3).
    • Integrated PaintTimingMixin into SoftNavigationEntry for FCP.
    • Expanded DOM modification triggers.
    • Other implementation changes:
      • Introduced advanced paint attribution modes (Pre-Paint based and lazy bottom-up tree walk) (7dacb1ba603ea, 9f42b77c0cb66).
      • Changed NavigationID to report a number instead of a UUID (c701061e45c73).
      • Replaced NodeFlags::kModifiedBySoftNavigation bit (which would persist forever) with per-context maps (4a275bc93d519).
      • Improved support for multiple URL changes within a context (eb71cbb21b410).
      • Optimized ModifiedDOM calls and context validation checks (fe01d34922570, 1e8e9dc69d467).
  • Chrome 122

    • The 2% paint threshold now must be reached by each new soft navigation.
    • The start time of the soft navigation entry now marks the processing end time of the user interaction which triggered it.
    • Elements painted after an interaction, but before a soft navigation is detected will only count as LCP candidates if their paints are attributable to the interaction.
  • Chrome 121

    • The paint threshold is reduced from 20% to 2%.
  • Chrome 120

    • The first soft navigation on a page now also requires, in addition to the URL and DOM change, that the user interaction triggers a threshold amount of painting on the page.
    • This threshold is set to 20% of the amount which was painted before the page's very first user interaction. (Subsequent navigations do not require this, due to a bug)
  • Chrome 119

    • Keyboard events can now trigger soft navigations.
  • Chrome 117

    • FP and FCP entries are no longer emitted after soft navigation (without a command-line flag).
  • Chrome 115

    • Navigation ID is changed to a random UUID in performance entries.
  • Chrome 112

    • Performance observers need to be created with a flag to see FP, FCP and LCP events after soft navigation.
  • Chrome 110: Initial origin trial release of soft navigation heuristics.

    • Soft navigation requires a click event to trigger both a URL change and an addition to the DOM, in any order.
    • Soft navigation entries are exposed to performance observers, as well as FP, FCP and LCP after each soft navigation.
    • Navigation id is included, and is a simple incrementing integer.