Start · Sprachen · JavaScript · Referenz · TaskAttributionTiming.containerSrc

TaskAttributionTiming.containerSrc

Eigenschaft

Liefert den Wert des <code>src</code>-Attributs des Containers (z. B. <code>&lt;iframe&gt;</code>), dem eine lange Aufgabe zugeordnet wird. Nur lesbar.

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

Signatur

TaskAttributionTiming.containerSrc

Beschreibung

Die nur lesbare Eigenschaft containerSrc gehört zur Schnittstelle TaskAttributionTiming aus der Long Tasks API. Ein solches Objekt erhältst du nicht direkt, sondern über das Array attribution eines PerformanceLongTaskTiming-Eintrags. Dieser wird erzeugt, wenn der Haupt-Thread länger als 50 ms am Stück blockiert war.

containerSrc gibt an, woher der Inhalt des Containers stammt, der die Aufgabe verursacht hat. Gemeint ist der Wert des src-Attributs des <iframe>-, <embed>- oder <object>-Elements. Wird die Aufgabe dem Fenster der obersten Ebene zugeordnet (containerType === "window") oder ist kein src gesetzt, ist der Wert ein leerer String.

Sinnvoll ist das vor allem beim Performance-Monitoring (RUM). Damit findest du heraus, ob eingebettete Drittanbieter-Inhalte wie Werbung, Video-Player oder Social-Widgets den Haupt-Thread blockieren. Zusammen mit containerType, containerId und containerName kannst du das verursachende Element genauer bestimmen.

Rückgabewert

Typ
string
Beschreibung
Der Wert des src-Attributs des Containers, dem die lange Aufgabe zugeordnet wird. Ein leerer String "", wenn es keinen passenden Container gibt oder kein src gesetzt ist.

Beispiele

Lange Aufgaben beobachten und Container-Quelle ausgeben

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}`,
        `Quelle: ${attr.containerSrc || '(keine)'}`
      );
    }
  }
});

observer.observe({ type: 'longtask', buffered: true });
Lange Aufgabe (132 ms) Typ: iframe Quelle: https://ads.example.com/banner.html

Blockierende Drittanbieter-iframes nach Quelle zusammenfassen

const blockingBySrc = new Map();

new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    for (const { containerType, containerSrc } of entry.attribution) {
      if (containerType !== 'iframe' || !containerSrc) continue;
      const host = new URL(containerSrc, location.href).host;
      blockingBySrc.set(host, (blockingBySrc.get(host) ?? 0) + entry.duration);
    }
  }
}).observe({ type: 'longtask', buffered: true });

// Beim Verlassen der Seite an das Monitoring schicken
addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'hidden' && blockingBySrc.size) {
    navigator.sendBeacon('/rum/longtasks', JSON.stringify(Object.fromEntries(blockingBySrc)));
  }
});

Feature-Erkennung vor der Nutzung

const supportsLongTasks =
  typeof PerformanceObserver !== 'undefined' &&
  PerformanceObserver.supportedEntryTypes?.includes('longtask');

if (supportsLongTasks && 'TaskAttributionTiming' in window) {
  console.log('containerSrc verfügbar:',
    'containerSrc' in TaskAttributionTiming.prototype);
} else {
  console.log('Long Tasks API wird nicht unterstützt');
}
containerSrc verfügbar: true (Chromium) Long Tasks API wird nicht unterstützt (Firefox/Safari)

// Wichtig · Fallstricke

  • Experimentell und nur in Chromium: Firefox und Safari unterstützen die Long Tasks API nicht. Prüfe deshalb immer vorher mit PerformanceObserver.supportedEntryTypes, ob sie verfügbar ist.
  • Grobe Zuordnung: In der Praxis liefert Chrome oft containerType: "window" und einen leeren containerSrc, auch wenn ein iframe beteiligt war. Sieh die Zuordnung als Hinweis, nicht als exakte Ursachenanalyse. Wenn du Skripte genau zuordnen willst, ist die neuere Long Animation Frames API (long-animation-frame) mit scripts[].sourceURL meist besser geeignet.
  • Wert zum Zeitpunkt der Aufgabe: Gemeldet wird das src-Attribut, nicht zwingend die aktuelle URL des Dokuments im iframe. Nach einer Navigation im iframe können beide voneinander abweichen.
  • Datenschutz: containerSrc kann vollständige URLs mit Abfrageparametern enthalten, zum Beispiel Tracking-IDs. Kürze sie vor dem Senden an dein Monitoring am besten auf den Host.
  • Die Eigenschaft ist nur lesbar. Zuweisungen werden stillschweigend ignoriert, im Strict Mode lösen sie einen TypeError aus.