Start · Sprachen · JavaScript · Referenz · InteractionContentfulPaint.toJSON()

InteractionContentfulPaint.toJSON()

Methode

Gibt ein einfaches Objekt mit allen serialisierbaren Eigenschaften eines <code>InteractionContentfulPaint</code>-Eintrags zurück, z. B. für <code>JSON.stringify()</code>.

seit JavaScript Experimentell: nur Chromium-Browser (hinter Flag o Kategorie: webapi

Signatur

InteractionContentfulPaint.prototype.toJSON()

Beschreibung

toJSON() ist die Serialisierungsmethode des InteractionContentfulPaint-Interfaces. Sie erzeugt ein einfaches JavaScript-Objekt mit den Eigenschaften des Performance-Eintrags. Ein solches Objekt lässt sich problemlos als JSON speichern, verschicken oder protokollieren. Beim Aufruf von JSON.stringify() auf einem Eintrag wird toJSON() automatisch aufgerufen.

InteractionContentfulPaint gehört zur experimentellen Soft-Navigations-API. Der Eintrag beschreibt das größte Inhaltselement, das nach einer Nutzerinteraktion gezeichnet wurde, etwa nach einem clientseitigen Routenwechsel in einer Single-Page-App. Das Prinzip gleicht LargestContentfulPaint beim ersten Laden der Seite. Das serialisierte Objekt enthält die geerbten PerformanceEntry-Felder (name, entryType, startTime, duration) und die inhaltsbezogenen Felder wie renderTime, loadTime, size, id und url.

Typischer Einsatz ist das Real User Monitoring (RUM): Man sammelt die Einträge in einem PerformanceObserver, wandelt sie mit toJSON() um und schickt sie per navigator.sendBeacon() oder fetch() an einen Analyse-Endpunkt.

Rückgabewert

Typ
Object
Beschreibung
Ein einfaches Objekt mit den serialisierbaren Eigenschaften des Eintrags, z. B. name, entryType, startTime, duration, renderTime, loadTime, size, id und url. Die DOM-Referenz element ist nicht enthalten.

Beispiele

Einträge beobachten und als JSON ausgeben

const TYPE = 'interaction-contentful-paint';

if (PerformanceObserver.supportedEntryTypes?.includes(TYPE)) {
  const observer = new PerformanceObserver((list) => {
    for (const entry of list.getEntries()) {
      // toJSON() liefert ein einfaches Objekt
      console.log(entry.toJSON());
    }
  });
  observer.observe({ type: TYPE, buffered: true });
} else {
  console.log('InteractionContentfulPaint wird nicht unterstützt.');
}
{ name: '', entryType: 'interaction-contentful-paint', startTime: 5321.4, duration: 0, renderTime: 5321.4, loadTime: 5290.1, size: 48000, id: 'hero', url: 'https://example.com/img/produkt.jpg' }

Messwerte per sendBeacon an einen RUM-Endpunkt senden

const buffer = [];

const observer = new PerformanceObserver((list) => {
  // Nur die serialisierbaren Daten puffern, keine DOM-Referenzen
  buffer.push(...list.getEntries().map((entry) => entry.toJSON()));
});

try {
  observer.observe({ type: 'interaction-contentful-paint', buffered: true });
} catch (err) {
  console.warn('Eintragstyp nicht verfügbar:', err);
}

document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'hidden' && buffer.length > 0) {
    navigator.sendBeacon('/rum/icp', JSON.stringify(buffer));
    buffer.length = 0;
  }
});

JSON.stringify ruft toJSON() automatisch auf

const observer = new PerformanceObserver((list) => {
  const [entry] = list.getEntries();
  // gleichwertig: JSON.stringify(entry.toJSON())
  const json = JSON.stringify(entry);
  console.log(json);

  // Das DOM-Element muss man bei Bedarf selbst beschreiben
  const extra = { ...entry.toJSON(), tag: entry.element?.tagName ?? null };
  console.log(extra.tag);
});

observer.observe({ type: 'interaction-contentful-paint', buffered: true });
{"name":"","entryType":"interaction-contentful-paint","startTime":5321.4,...} IMG

// Wichtig · Fallstricke

  • Experimentell: InteractionContentfulPaint gibt es bisher nur in Chromium-Browsern, und zwar hinter einem Flag oder im Origin Trial Soft Navigations. Firefox und Safari unterstützen die Schnittstelle nicht. Prüfe die Unterstützung vorher mit PerformanceObserver.supportedEntryTypes.includes('interaction-contentful-paint'). Name und Felder können sich noch ändern.
  • Die Eigenschaft element ist eine DOM-Referenz. Sie wird nicht serialisiert. Brauchst du Informationen über das Element, zum Beispiel einen Selektor oder den Tag-Namen, musst du sie selbst ermitteln und ergänzen.
  • renderTime kann bei Ressourcen von anderen Ursprüngen 0 sein, wenn der Server keinen Timing-Allow-Origin-Header sendet. Verwende dann loadTime oder startTime als Ersatzwert.
  • url kann vollständige Bild-URLs mit Query-Parametern enthalten. Bereinige die Daten vor dem Versand an Analyse-Dienste, damit keine personenbezogenen Daten übertragen werden.