Start · Sprachen · JavaScript · Referenz · PerformanceTimingConfidence.randomizedTriggerRate

PerformanceTimingConfidence.randomizedTriggerRate

Eigenschaft

Schreibgeschützte Zahl zwischen <code>0</code> und <code>1</code>. Sie gibt an, mit welcher Wahrscheinlichkeit der Browser <code>PerformanceTimingConfidence.value</code> zufällig verrauscht hat.

seit JavaScript Experimentell: Chromium-basierte Browser (neu), no Kategorie: webapi

Signatur

PerformanceTimingConfidence.randomizedTriggerRate

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

Typ
number
Beschreibung
Eine Gleitkommazahl zwischen 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.');
}
Konfidenz: high, Rauschrate: 0.5

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));
0.90

// Wichtig · Fallstricke

  • Experimentelle API: Bisher gibt es sie nur in neueren Chromium-Versionen. Prüfe deshalb immer, ob nav.confidence vorhanden ist (nav.confidence?.randomizedTriggerRate). Firefox und Safari unterstützen die Schnittstelle derzeit nicht.
  • Einzelwerte nicht korrigierbar: Die Rate verrät nicht, ob gerade dieser value verrauscht 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.