Start · Sprachen · JavaScript · Referenz · LargestContentfulPaint.size

LargestContentfulPaint.size

Eigenschaft

Gibt die sichtbare Fläche (Breite × Höhe in CSS-Pixeln) des Elements zurück, das als Largest Contentful Paint (LCP) gemeldet wurde.

seit JavaScript Chrome 77+, Edge 79+, Firefox 122+; Safari: keine Kategorie: webapi

Signatur

LargestContentfulPaint.size

Beschreibung

Die schreibgeschützte Eigenschaft size eines LargestContentfulPaint-Eintrags liefert eine Ganzzahl: die Fläche des Elements im Viewport, also Breite mal Höhe in CSS-Pixeln. Anhand dieses Werts entscheidet der Browser, welches Element gerade das „größte" ist. Jeder neue LCP-Eintrag hat deshalb einen größeren size-Wert als der vorherige.

Gezählt wird nur der sichtbare Teil des Elements. Bereiche außerhalb des Viewports oder durch overflow abgeschnittene Teile fallen weg. Rahmen, Innenabstände (padding) und Außenabstände (margin) zählen nicht mit. Wird ein Bild größer angezeigt als seine natürliche Auflösung, rechnet der Browser die Fläche auf die natürliche Größe herunter. Hochskalierte kleine Bilder bekommen so keinen Vorteil.

In der Praxis brauchen Sie size vor allem zur Analyse der Core Web Vitals. Zusammen mit element, url und startTime sehen Sie, welches Element den LCP auslöst und warum es als größtes gilt. Das hilft etwa bei der Frage, ob ein Hero-Bild oder ein großer Textblock den Messwert bestimmt.

Rückgabewert

Typ
number
Beschreibung
Ganzzahl mit der sichtbaren Fläche des Elements (Breite × Höhe in CSS-Pixeln). Ist das Element vollständig verdeckt oder außerhalb des Viewports, wird es gar nicht erst als LCP-Kandidat gemeldet.

Beispiele

LCP-Kandidaten mit Größe protokollieren

const observer = new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    console.log(
      `LCP-Kandidat: <${entry.element?.tagName.toLowerCase()}>`,
      `Fläche: ${entry.size} px²`,
      `Zeit: ${entry.startTime.toFixed(0)} ms`
    );
  }
});

// buffered: true liefert auch Einträge, die vor der Registrierung entstanden sind
observer.observe({ type: 'largest-contentful-paint', buffered: true });
LCP-Kandidat: <h1> Fläche: 38400 px² Zeit: 412 ms LCP-Kandidat: <img> Fläche: 460800 px² Zeit: 1180 ms

Endgültiges LCP-Element samt Größe an die Analyse senden

let lastEntry = null;

const po = new PerformanceObserver((list) => {
  const entries = list.getEntries();
  lastEntry = entries.at(-1); // der jüngste Eintrag ist immer der größte
});
po.observe({ type: 'largest-contentful-paint', buffered: true });

// Wird die Seite verborgen, steht der LCP fest
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState !== 'hidden' || !lastEntry) return;
  po.disconnect();

  const payload = JSON.stringify({
    lcp: Math.round(lastEntry.startTime),
    size: lastEntry.size,
    url: lastEntry.url || null,
    tag: lastEntry.element?.tagName ?? null
  });
  navigator.sendBeacon('/analytics/lcp', payload);
}, { once: true });

Gemeldete Fläche mit der Layoutgröße vergleichen

new PerformanceObserver((list) => {
  const entry = list.getEntries().at(-1);
  const el = entry.element;
  if (!el) return; // Element wurde evtl. aus dem DOM entfernt

  const rect = el.getBoundingClientRect();
  const layoutArea = Math.round(rect.width * rect.height);
  const ratio = (entry.size / layoutArea * 100).toFixed(1);

  console.log(`LCP size: ${entry.size}, Layout-Fläche: ${layoutArea} (${ratio} %)`);
  // Deutlich unter 100 %: Element ist teilweise außerhalb des Viewports
  // oder ein hochskaliertes Bild
}).observe({ type: 'largest-contentful-paint', buffered: true });
LCP size: 230400, Layout-Fläche: 307200 (75.0 %)

// Wichtig · Fallstricke

  • Browser-Unterstützung: Chromium-Browser (Chrome, Edge, Opera) seit Chrome 77 und Firefox seit Version 122. Safari unterstützt die Largest Contentful Paint API nicht. Prüfen Sie die Unterstützung vorab, zum Beispiel mit PerformanceObserver.supportedEntryTypes.includes('largest-contentful-paint').
  • size gibt eine Fläche an, weder Breite noch Höhe. Die einzelnen Maße erhalten Sie über entry.element.getBoundingClientRect().
  • Der Wert entspricht der Fläche zum Zeitpunkt des Renderns. Spätere Layout-Änderungen, Scrollen oder Größenänderungen des Fensters ändern einen bereits gemeldeten Eintrag nicht.
  • Sobald der Nutzer interagiert (Klick, Tastendruck, Scrollen), meldet der Browser keine neuen LCP-Einträge mehr. Maßgeblich ist dann der zuletzt gemeldete Eintrag.
  • Bei Bildern aus anderen Quellen ohne Timing-Allow-Origin-Header ist renderTime auf 0 gesetzt oder grob gerundet. size steht trotzdem zur Verfügung.
  • Die Eigenschaft ist schreibgeschützt. Zuweisungen werden stillschweigend ignoriert.