Signatur
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 zwischen0und1. Sie gibt an, mit welcher Wahrscheinlichkeitvaluezum 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
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');
}
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));
// 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?.valueoder'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. Verwendevaluenicht, um einzelne Nutzer oder Aufrufe zu bewerten. Werte die Daten nur aggregiert und unter Berücksichtigung vonrandomizedTriggerRateaus. - 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 beiresource- oderpaint-Einträgen. - Filtere
"low"-Einträge nicht einfach heraus: Das kann die Statistik verzerren. Besser ist es, beide Gruppen getrennt auszuwerten.