Start · Sprachen · JavaScript · Referenz · PerformanceNavigationTiming.confidence

PerformanceNavigationTiming.confidence

Eigenschaft

Liefert ein <code>PerformanceTimingConfidence</code>-Objekt, das angibt, ob die Navigationsmesswerte als repräsentativ („high“) oder als verzerrt („low“) gelten.

seit JavaScript Experimentell: Chromium-basierte Browser (ca. Chro Kategorie: webapi

Signatur

PerformanceNavigationTiming.confidence

Beschreibung

Die schreibgeschützte Eigenschaft confidence eines PerformanceNavigationTiming-Eintrags gibt ein PerformanceTimingConfidence-Objekt zurück. Darin schätzt der Browser ein, ob die gemessenen Navigationszeiten (z. B. responseStart, domContentLoadedEventEnd, loadEventEnd) die typische Ladeleistung der Seite widerspiegeln oder ob äußere Umstände sie verfälscht haben.

Solche Umstände liegen meist außerhalb der Kontrolle der Website. Beispiele sind ein Kaltstart des Browsers, eine Seite, die beim Wiederherstellen einer Sitzung geladen wird, oder ein stark ausgelastetes Gerät. Messungen mit niedriger Zuverlässigkeit können Real-User-Monitoring-Daten (RUM) deutlich verschlechtern. Mit confidence lassen sie sich getrennt auswerten oder herausfiltern.

Das Objekt hat zwei Eigenschaften:

  • value: "high" oder "low". Das ist die Einschätzung des Browsers.
  • randomizedTriggerRate: eine Zahl zwischen 0 und 1. Sie gibt an, mit welcher Wahrscheinlichkeit value zum Schutz der Privatsphäre zufällig gesetzt wurde (Randomized Response, eine Form von Differential Privacy).

Weil einzelne Werte bewusst verrauscht sind, ist confidence für zusammengefasste Auswertungen gedacht, nicht für Entscheidungen zu einzelnen Seitenaufrufen. Serverseitig kann man mit randomizedTriggerRate den tatsächlichen Anteil zuverlässiger Messungen statistisch zurückrechnen.

Rückgabewert

Typ
PerformanceTimingConfidence | undefined
Beschreibung
Ein Objekt mit value ("high" | "low") und randomizedTriggerRate (number, 0–1) sowie einer Methode toJSON(). In Browsern ohne Unterstützung ist die Eigenschaft undefined.

Beispiele

Zuverlässigkeit der aktuellen Navigation auslesen

const [nav] = performance.getEntriesByType('navigation');

if (nav && nav.confidence) {
  const { value, randomizedTriggerRate } = nav.confidence;
  console.log(`Zuverlässigkeit: ${value}`);
  console.log(`Zufallsrate: ${randomizedTriggerRate}`);
} else {
  console.log('confidence wird von diesem Browser nicht unterstützt');
}
Zuverlässigkeit: high Zufallsrate: 0.5

RUM-Daten mit Zuverlässigkeit an den Server senden

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const payload = {
      url: entry.name,
      ttfb: entry.responseStart - entry.startTime,
      load: entry.loadEventEnd - entry.startTime,
      // toJSON() liefert { value, randomizedTriggerRate }
      confidence: entry.confidence?.toJSON() ?? null
    };
    navigator.sendBeacon('/rum', JSON.stringify(payload));
  }
});

// buffered: true liefert auch den bereits erzeugten Navigationseintrag
observer.observe({ type: 'navigation', buffered: true });

Echten Anteil zuverlässiger Messungen schätzen (Auswertung)

// records: gesammelte Beacons mit confidence-Daten
const estimateHighShare = (records) => {
  const valid = records.filter((r) => r.confidence);
  const n = valid.length;
  if (n === 0) return null;

  const p = valid[0].confidence.randomizedTriggerRate;
  const observedHigh = valid.filter((r) => r.confidence.value === 'high').length;

  // Mit Wahrscheinlichkeit p wurde zufällig (50/50) gewählt
  const estimated = (observedHigh / n - p / 2) / (1 - p);
  return Math.min(1, Math.max(0, estimated));
};

const sample = [
  { confidence: { value: 'high', randomizedTriggerRate: 0.5 } },
  { confidence: { value: 'high', randomizedTriggerRate: 0.5 } },
  { confidence: { value: 'high', randomizedTriggerRate: 0.5 } },
  { confidence: { value: 'low', randomizedTriggerRate: 0.5 } }
];

console.log(estimateHighShare(sample));
1

// Wichtig · Fallstricke

  • Experimentell: Derzeit nur in Chromium-basierten Browsern verfügbar. Firefox und Safari unterstützen die Eigenschaft nicht. Prüfe die Unterstützung immer vorher, z. B. mit entry.confidence?.value oder 'confidence' in PerformanceNavigationTiming.prototype.
  • Einzelwerte sind absichtlich verrauscht: Wegen der zufälligen Antworten kann ein einzelner Eintrag "low" melden, obwohl die Messung zuverlässig war, und umgekehrt. Verwende value nicht, um einzelne Nutzer oder Aufrufe zu bewerten. Werte die Daten nur aggregiert und unter Berücksichtigung von randomizedTriggerRate aus.
  • Die Korrekturformel im Beispiel geht davon aus, dass bei der zufälligen Antwort beide Werte gleich wahrscheinlich sind. Das genaue Verfahren legt die Spezifikation fest. Prüfe es, bevor du darauf produktive Auswertungen aufbaust.
  • Die Eigenschaft gibt es nur bei Einträgen vom Typ navigation, nicht bei resource- oder paint-Einträgen.
  • Filtere "low"-Einträge nicht einfach heraus: Das kann die Statistik verzerren. Besser ist es, beide Gruppen getrennt auszuwerten.