Start · Sprachen · JavaScript · Referenz · TaskAttributionTiming.containerName

TaskAttributionTiming.containerName

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>name</code>-Attribut des Containers (z. B. eines <code>&lt;iframe&gt;</code>) liefert, dem eine lange Aufgabe zugeordnet wird.

seit JavaScript Experimentell: nur Chromium-Browser (Chrome/Edge 5 Kategorie: webapi

Signatur

TaskAttributionTiming.containerName

Beschreibung

containerName gehört zur Long Tasks API. Wenn der Browser eine lange Aufgabe meldet, also einen Block im Hauptthread, der länger als 50 ms dauert, enthält der zugehörige PerformanceLongTaskTiming-Eintrag im Array attribution ein oder mehrere TaskAttributionTiming-Objekte. Sie zeigen, wo die Arbeit angefallen ist. containerName liefert dabei den Wert des name-Attributs des betroffenen Containers.

Als Container zählen <iframe>, <embed> und <object>. Um welche Art es sich handelt, verrät containerType. Die Eigenschaft ist vor allem nützlich, wenn eine Seite mehrere eingebettete Frames von Drittanbietern enthält, etwa Werbung, Chat-Widgets oder Videoplayer. Mit einem sprechenden name an jedem Frame lässt sich im Real User Monitoring (RUM) schnell erkennen, welches Einbettungselement den Hauptthread blockiert.

Hat der Container kein name-Attribut oder stammt die Aufgabe aus dem Fenster selbst (containerType === "window"), ist der Wert ein leerer String. Zur genaueren Bestimmung sollte man containerName deshalb immer zusammen mit containerId und containerSrc auswerten.

Rückgabewert

Typ
string
Beschreibung
Der Wert des name-Attributs des Containers. Fehlt das Attribut oder gibt es keinen Container, ist es ein leerer String "".

Beispiele

Container-Namen langer Aufgaben protokollieren

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    for (const attr of entry.attribution) {
      console.log(
        `Lange Aufgabe (${Math.round(entry.duration)} ms)`,
        `Typ: ${attr.containerType}`,
        `Name: "${attr.containerName}"`
      );
    }
  }
});

observer.observe({ type: 'longtask', buffered: true });
Lange Aufgabe (132 ms) Typ: iframe Name: "werbung-oben" Lange Aufgabe (87 ms) Typ: window Name: ""

Blockierzeit pro benanntem iframe summieren (RUM)

// HTML: <iframe name="chat-widget" src="https://chat.example.com"></iframe>
const blockierzeit = new Map();

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    const [attr] = entry.attribution;
    // Fallback, falls kein name-Attribut gesetzt ist
    const key = attr?.containerName || attr?.containerSrc || '(Hauptdokument)';
    blockierzeit.set(key, (blockierzeit.get(key) ?? 0) + entry.duration);
  }
});
observer.observe({ type: 'longtask', buffered: true });

// Beim Verlassen der Seite an den Analyse-Server senden
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'hidden') {
    navigator.sendBeacon('/rum/longtasks', JSON.stringify(Object.fromEntries(blockierzeit)));
  }
});

Unterstützung vor der Nutzung prüfen

const unterstuetzt =
  typeof PerformanceObserver !== 'undefined' &&
  PerformanceObserver.supportedEntryTypes?.includes('longtask') &&
  typeof TaskAttributionTiming !== 'undefined' &&
  'containerName' in TaskAttributionTiming.prototype;

console.log(unterstuetzt ? 'containerName verfügbar' : 'Long Tasks API nicht unterstützt');
containerName verfügbar // in Chrome/Edge Long Tasks API nicht unterstützt // in Firefox/Safari

// Wichtig · Fallstricke

  • Experimentell und nur in Chromium verfügbar: Firefox und Safari kennen weder longtask-Einträge noch TaskAttributionTiming. Deshalb vorher immer mit PerformanceObserver.supportedEntryTypes prüfen, ob die API unterstützt wird.
  • Häufig leer: Bei Aufgaben aus dem eigenen Dokument (containerType ist "window") und bei Frames ohne name-Attribut ist der Wert "". Für eine aussagekräftige Auswertung sollte jedes eingebettete Frame ein eindeutiges name-Attribut erhalten.
  • Grobe Zuordnung: Die Attribution nennt nur den Container, nicht das verursachende Skript. Für Details auf Skriptebene gibt es in neueren Chromium-Versionen die Long Animation Frames API (long-animation-frame).
  • Datenschutz: Bei Frames von fremden Ursprüngen (cross-origin) gibt der Browser absichtlich nur wenige Informationen preis. containerName ist das Attribut, das im eigenen Dokument steht. Es verrät also nichts über den Inhalt des Frames.
  • Die Eigenschaft ist schreibgeschützt. Zuweisungen werden ignoriert, im Strict Mode lösen sie einen TypeError aus.