Signatur
Beschreibung
Die Eigenschaft randomizedTriggerRate gehört zur Schnittstelle PerformanceTimingConfidence. Ein solches Objekt erhältst du über PerformanceNavigationTiming.confidence. Es sagt aus, wie aussagekräftig die Navigations-Timing-Daten eines Seitenaufrufs sind. Das Feld value ist entweder "high" oder "low". Bei "low" hat z. B. ein Kaltstart des Browsers die Messwerte verfälscht.
Aus Datenschutzgründen gibt der Browser value nicht immer wahrheitsgemäß aus. Er wendet ein Verfahren der Differential Privacy an („randomized response“): Mit der Wahrscheinlichkeit randomizedTriggerRate ersetzt er den echten Wert durch einen zufällig gewählten. Diese Rate gibt die Eigenschaft als Gleitkommazahl zwischen 0 und 1 zurück.
Wichtig ist die Rate vor allem für die Auswertung aggregierter Daten, etwa im Real User Monitoring (RUM). Einzelne Messungen lassen sich damit nicht „entrauschen“. Über viele Seitenaufrufe hinweg kannst du den Anteil echter "high"-Werte jedoch statistisch schätzen. Deshalb solltest du die Rate zusammen mit value an dein Analyse-Backend senden.
Rückgabewert
0 und 1. Sie gibt die Wahrscheinlichkeit an, mit der value zufällig bestimmt wurde. Der Wert ist schreibgeschützt.Beispiele
Rate und Konfidenz der aktuellen Navigation auslesen
const [nav] = performance.getEntriesByType('navigation');
if (nav?.confidence) {
const { value, randomizedTriggerRate } = nav.confidence;
console.log(`Konfidenz: ${value}, Rauschrate: ${randomizedTriggerRate}`);
} else {
console.log('PerformanceTimingConfidence wird nicht unterstützt.');
}
Konfidenzdaten per RUM-Beacon versenden
const sendNavigationMetrics = () => {
const [nav] = performance.getEntriesByType('navigation');
if (!nav) return;
const payload = {
url: location.href,
ttfb: nav.responseStart - nav.startTime,
loadTime: nav.loadEventEnd - nav.startTime,
// Beide Werte mitsenden – nur zusammen sind sie statistisch auswertbar
confidence: nav.confidence?.value ?? null,
randomizedTriggerRate: nav.confidence?.randomizedTriggerRate ?? null
};
navigator.sendBeacon('/rum', JSON.stringify(payload));
};
addEventListener('pagehide', sendNavigationMetrics, { once: true });
Echten Anteil von "high" auf dem Server schätzen
// Beobachtet: P(high) = (1 - r) * p + r * 0.5
// Umgestellt: p = (beobachtet - r / 2) / (1 - r)
const estimateTrueHighRate = (samples) => {
const r = samples[0].randomizedTriggerRate;
const observed = samples.filter((s) => s.confidence === 'high').length / samples.length;
const estimate = (observed - r / 2) / (1 - r);
return Math.min(1, Math.max(0, estimate)); // auf [0, 1] begrenzen
};
const samples = [
...Array(70).fill({ confidence: 'high', randomizedTriggerRate: 0.5 }),
...Array(30).fill({ confidence: 'low', randomizedTriggerRate: 0.5 })
];
console.log(estimateTrueHighRate(samples).toFixed(2));
// Wichtig · Fallstricke
- Experimentelle API: Bisher gibt es sie nur in neueren Chromium-Versionen. Prüfe deshalb immer, ob
nav.confidencevorhanden ist (nav.confidence?.randomizedTriggerRate). Firefox und Safari unterstützen die Schnittstelle derzeit nicht. - Einzelwerte nicht korrigierbar: Die Rate verrät nicht, ob gerade dieser
valueverrauscht wurde. Brauchbar ist sie nur für die statistische Auswertung vieler Stichproben. - Rate nicht fest annehmen: Browser können die Rate je nach Version oder Umgebung ändern. Speichere sie deshalb pro Messung und gruppiere bei der Auswertung nach der Rate.
- Die Korrekturformel wird bei kleinen Stichproben ungenau und kann Werte außerhalb von
[0, 1]liefern. Begrenze das Ergebnis darum und arbeite mit ausreichend großen Datenmengen. - Über
nav.toJSON()werden die Konfidenzdaten serialisiert, sofern der Browser sie unterstützt.