Start · Sprachen · JavaScript · Referenz · PerformanceTimingConfidence.value

PerformanceTimingConfidence.value

Eigenschaft

Schreibgeschützte Zeichenkette (<code>"high"</code> oder <code>"low"</code>), die angibt, ob ein Leistungsdatensatz die typische Leistung der Anwendung wahrscheinlich richtig wiedergibt.

seit JavaScript Experimentell: Chromium-basierte Browser (Chrome/E Kategorie: webapi

Signatur

PerformanceTimingConfidence.value

Beschreibung

Die schreibgeschützte Eigenschaft value des Interfaces PerformanceTimingConfidence gibt an, wie verlässlich ein Leistungsdatensatz ist. Sie zeigt, ob ein Messwert die normale Leistung der Anwendung abbildet oder ob äußere Umstände ihn wahrscheinlich verfälscht haben. Solche Umstände sind z. B. ein Kaltstart des Browsers, die Wiederherstellung einer Sitzung oder ein stark ausgelastetes Gerät. Das zugehörige Objekt erhält man derzeit über PerformanceNavigationTiming.confidence.

Mögliche Werte sind:

  • "high": Der Datensatz spiegelt die typische Leistung der Anwendung wahrscheinlich richtig wider.
  • "low": Der Datensatz ist wahrscheinlich durch Faktoren verfälscht, die nichts mit der Anwendung zu tun haben. Solche Messwerte sollte man in der Auswertung getrennt betrachten oder herausfiltern.

Zum Schutz der Privatsphäre ist der Wert absichtlich verrauscht. Mit der Wahrscheinlichkeit, die in PerformanceTimingConfidence.randomizedTriggerRate steht, wird value zufällig gewählt und nicht aus dem tatsächlichen Zustand abgeleitet. Ein einzelner Wert ist deshalb nie ganz sicher. Nützlich wird die Eigenschaft erst, wenn man viele Datensätze gesammelt auswertet (Real User Monitoring, RUM) und die Zufallsrate dabei herausrechnet.

Rückgabewert

Typ
"high" | "low"
Beschreibung
Eine Zeichenkette: "high" bei hohem Vertrauen, "low" bei geringem Vertrauen in den Datensatz. Der Wert kann zufällig verfälscht sein (siehe randomizedTriggerRate).

Beispiele

Vertrauensmaß des Navigationseintrags auslesen

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

if (nav?.confidence) {
  const { value, randomizedTriggerRate } = nav.confidence;
  console.log(`Vertrauen: ${value}`);
  console.log(`Zufallsrate: ${randomizedTriggerRate}`);
} else {
  console.log('PerformanceTimingConfidence wird nicht unterstützt.');
}
Vertrauen: high Zufallsrate: 0.5

Vertrauensmaß zusammen mit RUM-Daten senden

const sendNavigationMetrics = () => {
  const [nav] = performance.getEntriesByType('navigation');
  if (!nav) return;

  const payload = {
    url: location.pathname,
    ttfb: Math.round(nav.responseStart - nav.startTime),
    loadTime: Math.round(nav.loadEventEnd - nav.startTime),
    // Fallback 'unknown' für Browser ohne Unterstützung
    confidence: nav.confidence?.value ?? 'unknown',
    triggerRate: nav.confidence?.randomizedTriggerRate ?? null
  };

  navigator.sendBeacon('/rum', JSON.stringify(payload));
};

addEventListener('pagehide', sendNavigationMetrics, { once: true });

Echten Anteil unzuverlässiger Messungen auf dem Server schätzen

// records: gesammelte Datensätze mit { confidence, triggerRate }
const estimateTrueLowRate = (records) => {
  const valid = records.filter((r) => r.confidence !== 'unknown');
  if (valid.length === 0) return null;

  const observedLow = valid.filter((r) => r.confidence === 'low').length / valid.length;
  const rate = valid.reduce((sum, r) => sum + r.triggerRate, 0) / valid.length;

  // Mit Wahrscheinlichkeit 'rate' ist der Wert zufällig (je 50 % high/low)
  const estimate = (observedLow - rate / 2) / (1 - rate);
  return Math.min(1, Math.max(0, estimate));
};

const sample = [
  ...Array(70).fill({ confidence: 'high', triggerRate: 0.5 }),
  ...Array(30).fill({ confidence: 'low', triggerRate: 0.5 })
];

console.log(estimateTrueLowRate(sample).toFixed(2));
0.10

// Wichtig · Fallstricke

  • Experimentell: Derzeit unterstützen nur Chromium-basierte Browser die Eigenschaft. Prüfe deshalb immer mit nav.confidence?.value, ob sie vorhanden ist, bevor du sie verwendest.
  • Absichtlich verrauscht: Einem einzelnen Wert kann man nicht trauen, er kann zufällig gesetzt sein. Treffe keine Entscheidungen für einzelne Nutzer anhand von value (z. B. Funktionen abschalten). Werte die Eigenschaft nur statistisch über viele Datensätze aus und rechne dabei randomizedTriggerRate heraus.
  • Der Wert beschreibt nur die Umstände der Messung, nicht die Qualität deiner Seite. Ein "low" heißt nicht, dass die Seite langsam ist.
  • Die Eigenschaft ist schreibgeschützt. Zuweisungen werden stillschweigend ignoriert und werfen im Strict Mode keinen Fehler, weil es sich um einen Getter ohne Setter handelt.
  • Mit toJSON() lässt sich das Objekt direkt serialisieren, z. B. über JSON.stringify(nav.confidence).