Start · Sprachen · JavaScript · Referenz · PerformanceSoftNavigation.interactionId

PerformanceSoftNavigation.interactionId

Eigenschaft

Gibt die <code>interactionId</code> des <code>PerformanceEventTiming</code>-Eintrags zurück, dessen Nutzerinteraktion die weiche Navigation ausgelöst hat.

seit JavaScript Experimentell: Chromium (hinter Flag bzw. Origin T Kategorie: webapi

Signatur

PerformanceSoftNavigation.interactionId

Beschreibung

Die schreibgeschützte Eigenschaft interactionId eines PerformanceSoftNavigation-Eintrags (Eintragstyp "soft-navigation") verknüpft eine weiche Navigation mit der Nutzerinteraktion, die sie ausgelöst hat. Eine weiche Navigation ist ein Seitenwechsel in einer Single-Page-Application (SPA), bei dem kein neues Dokument geladen wird. Der Browser erkennt ihn heuristisch: Eine Nutzerinteraktion (Klick, Tastendruck) führt zu einer URL-Änderung über die History-API und zu einer sichtbaren DOM-Änderung.

Der Wert entspricht der interactionId des zugehörigen PerformanceEventTiming-Eintrags (Eintragstyp "event"). So lässt sich genau feststellen, welcher Klick oder Tastendruck zur Navigation geführt hat. Außerdem kann man Kennzahlen wie die Eingabeverzögerung oder die Verarbeitungsdauer dieser Interaktion der jeweiligen Route zuordnen.

Typische Einsatzfälle sind Real User Monitoring (RUM) für SPAs: Metriken wie INP oder LCP lassen sich pro virtueller Seitenansicht erfassen, statt sie für die gesamte Lebensdauer des Dokuments zusammenzufassen.

Rückgabewert

Typ
number
Beschreibung
Eine positive Ganzzahl. Sie ist identisch mit der interactionId des auslösenden PerformanceEventTiming-Eintrags.

Beispiele

Weiche Navigationen samt Interaktions-ID protokollieren

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    console.log(`Soft-Navigation zu ${entry.name}`);
    console.log(`Ausgelöst durch Interaktion #${entry.interactionId}`);
  }
});

// buffered: true liefert auch Einträge, die schon vor dem Registrieren entstanden sind
observer.observe({ type: 'soft-navigation', buffered: true });
Soft-Navigation zu https://example.com/produkte Ausgelöst durch Interaktion #4271

Soft-Navigation mit dem auslösenden Event-Timing verknüpfen

const interactions = new Map();

// Event-Timing-Einträge nach interactionId sammeln
new PerformanceObserver((list) => {
  for (const e of list.getEntries()) {
    if (e.interactionId) interactions.set(e.interactionId, e);
  }
}).observe({ type: 'event', durationThreshold: 16, buffered: true });

new PerformanceObserver((list) => {
  for (const nav of list.getEntries()) {
    const trigger = interactions.get(nav.interactionId);
    if (trigger) {
      console.log(
        `${nav.name}: ausgelöst durch "${trigger.name}", ` +
        `Dauer ${Math.round(trigger.duration)} ms`
      );
    }
  }
}).observe({ type: 'soft-navigation', buffered: true });
https://example.com/warenkorb: ausgelöst durch "click", Dauer 88 ms

RUM-Beacon mit Feature-Erkennung senden

const supported = PerformanceObserver.supportedEntryTypes?.includes('soft-navigation');

if (supported) {
  new PerformanceObserver((list) => {
    for (const nav of list.getEntries()) {
      const payload = JSON.stringify({
        url: nav.name,
        interactionId: nav.interactionId,
        start: Math.round(nav.startTime)
      });
      navigator.sendBeacon('/rum', payload);
    }
  }).observe({ type: 'soft-navigation' });
} else {
  console.log('Soft-Navigation-Messung wird nicht unterstützt');
}

// Wichtig · Fallstricke

  • Experimentell: PerformanceSoftNavigation gibt es derzeit nur in Chromium-basierten Browsern, und zwar hinter dem Flag chrome://flags/#soft-navigation-heuristics oder im Rahmen eines Origin Trials. Firefox und Safari unterstützen die Schnittstelle nicht. Die Spezifikation kann sich noch ändern. Prüfe die Unterstützung immer vorher über PerformanceObserver.supportedEntryTypes.
  • Die Erkennung beruht auf einer Heuristik. Ändert sich die URL ohne Nutzerinteraktion (z. B. durch history.pushState() in einem Timer) oder bleibt eine sichtbare DOM-Änderung aus, entsteht kein Eintrag.
  • Einen passenden PerformanceEventTiming-Eintrag findest du nur, wenn du den Typ "event" beobachtest und die Interaktion den durationThreshold überschreitet. Der Standardwert liegt bei 104 ms, das Minimum bei 16 ms. Kürzere Interaktionen tauchen nicht auf.
  • Die Interaktions-IDs sind nicht fortlaufend (1, 2, 3 …), sondern steigen in unregelmäßigen Abständen an. Sie sind nur innerhalb eines Dokuments eindeutig.