Start · Sprachen · JavaScript · Referenz · PerformanceElementTiming.identifier

PerformanceElementTiming.identifier

Eigenschaft

Die schreibgeschützte Eigenschaft <code>identifier</code> gibt den Wert des <code>elementtiming</code>-Attributs des gemessenen Elements als String zurück.

seit JavaScript Chromium 77+ (Chrome, Edge, Opera); nicht in Firef Kategorie: webapi

Signatur

PerformanceElementTiming.identifier

Beschreibung

Die Eigenschaft identifier eines PerformanceElementTiming-Eintrags enthält genau den String, den du im HTML über das Attribut elementtiming vergeben hast, zum Beispiel <img src="hero.jpg" elementtiming="hero-bild">. Über diesen Bezeichner ordnest du Messwerte eindeutig einem bestimmten Element zu, auch wenn das Element selbst schon wieder aus dem DOM entfernt wurde.

Gebraucht wird die Eigenschaft vor allem beim Real User Monitoring (RUM): Ein PerformanceObserver mit dem Eintragstyp "element" liefert für jedes markierte Bild oder jeden markierten Textblock Werte wie renderTime und loadTime. Mit identifier kannst du die Messwerte an dein Analyse-Backend senden und sie dort nach Namen wie "hero-bild" oder "produkt-titel" auswerten.

Der Wert ist schreibgeschützt. Hat das Element kein elementtiming-Attribut, zum Beispiel wenn der Eintrag im Rahmen von Largest Contentful Paint automatisch entstanden ist, ist identifier ein leerer String "". Die Eigenschaft hat keine Parameter.

Rückgabewert

Typ
string
Beschreibung
Der Wert des elementtiming-Attributs des Elements oder ein leerer String, wenn das Attribut fehlt.

Beispiele

Renderzeit eines markierten Hero-Bildes protokollieren

// HTML: <img src="hero.jpg" elementtiming="hero-bild">
const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    console.log(`${entry.identifier}: gerendert nach ${Math.round(entry.renderTime)} ms`);
  }
});

observer.observe({ type: 'element', buffered: true });
hero-bild: gerendert nach 812 ms

Messwerte nach Bezeichner filtern und an ein Backend senden

// HTML: <h1 elementtiming="produkt-titel">…</h1>
const relevant = new Set(['hero-bild', 'produkt-titel']);

const observer = new PerformanceObserver((list) => {
  const daten = list.getEntries()
    .filter((e) => relevant.has(e.identifier))
    .map((e) => ({
      id: e.identifier,
      renderTime: Math.round(e.renderTime || e.loadTime),
      url: e.url || null
    }));

  if (daten.length > 0) {
    navigator.sendBeacon('/rum/element-timing', JSON.stringify(daten));
  }
});

observer.observe({ type: 'element', buffered: true });

Unterstützung prüfen und Einträge ohne Bezeichner erkennen

if (PerformanceObserver.supportedEntryTypes?.includes('element')) {
  new PerformanceObserver((list) => {
    list.getEntries().forEach((entry) => {
      const name = entry.identifier || '(ohne elementtiming)';
      console.log(name, entry.element?.tagName);
    });
  }).observe({ type: 'element', buffered: true });
} else {
  console.log('Element Timing API wird nicht unterstützt.');
}
hero-bild IMG produkt-titel H1

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Element Timing API ist experimentell und steht bislang nur in Chromium-basierten Browsern zur Verfügung. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher mit PerformanceObserver.supportedEntryTypes.includes('element'), ob sie verfügbar ist.
  • Beobachtet werden nur Elemente, die bereits beim Rendern ein elementtiming-Attribut tragen. Wenn du das Attribut nachträglich per JavaScript setzt, entsteht für ein Element, das schon gezeichnet wurde, kein neuer Eintrag.
  • Das Attribut ist nur an Bildern (<img>, <image> in SVG, CSS-Hintergrundbilder), Videos mit Poster-Bild und Elementen mit Textknoten wirksam.
  • Der Bezeichner muss nicht eindeutig sein. Wenn mehrere Elemente denselben Wert haben, erhältst du mehrere Einträge mit gleichem identifier. Unterscheide sie dann über entry.element oder entry.id.
  • Der Bezeichner stammt direkt aus dem Markup. Sende keine personenbezogenen Daten darüber an dein Analyse-Backend.