HTMLImageElement: loading-Eigenschaft

Die Eigenschaft loading des HTMLImageElement ist ein String, dessen Wert dem User-Agent einen Hinweis gibt, wie das Laden des Bildes, das sich derzeit außerhalb des visuellen Viewports des Fensters befindet, gehandhabt werden soll.

Dies hilft, das Laden der Dokumenteninhalte zu optimieren, indem das Laden des Bildes aufgeschoben wird, bis es voraussichtlich benötigt wird, anstatt es sofort während des initialen Seitenladevorgangs zu laden.

Wert

Ein String, der dem User-Agent einen Hinweis gibt, wie das Laden des Bildes am besten geplant werden kann, um die Seitenleistung zu optimieren. Die möglichen Werte sind:

eager

Das Standardverhalten, eager weist den Browser an, das Bild zu laden, sobald das <img>-Element verarbeitet wird.

lazy

Weis dem User-Agent an, das Laden des Bildes aufzuschieben, bis der Browser schätzt, dass es bald benötigt wird. Zum Beispiel, wenn der Nutzer durch das Dokument scrollt, bewirkt ein Wert von lazy, dass das Bild erst kurz vor dem Erscheinen im visuellen Viewport des Fensters geladen wird.

Nutzungshinweise

Hinweis: In Firefox muss das loading-Attribut vor dem src-Attribut definiert werden, andernfalls hat es keine Wirkung (Firefox-Bug 1647077).

JavaScript muss aktiviert sein

Das Laden wird nur verzögert, wenn JavaScript aktiviert ist. Dies ist eine Maßnahme gegen Tracking, denn wenn ein User-Agent Lazy-Loading unterstützen würde, wenn Skripting deaktiviert ist, wäre es dennoch möglich, die ungefähre Scroll-Position eines Benutzers während einer Sitzung zu verfolgen, indem man Bilder strategisch in das Markup einer Seite einfügt, sodass ein Server verfolgen kann, wie viele Bilder angefordert werden und wann.

Timing des Load-Ereignisses

Das load-Ereignis wird ausgelöst, wenn das Dokument vollständig verarbeitet wurde. Wenn Bilder eifrig geladen werden (das ist der Standard), muss jedes Bild im Dokument abgerufen werden, bevor das load-Ereignis ausgelöst werden kann.

Durch die Angabe des Werts lazy für loading verhindern Sie, dass das Bild das load-Attribut um die Zeit verzögert, die für das Anfordern, Abrufen und Verarbeiten des Bildes benötigt wird.

Bilder, deren loading-Attribut auf lazy gesetzt ist, die sich jedoch beim ersten Laden der Seite sofort im visuellen Viewport befinden, werden geladen, sobald das Layout bekannt ist. Ihr Laden verzögert jedoch nicht das Auslösen des load-Ereignisses. Mit anderen Worten, diese Bilder werden nicht sofort beim Verarbeiten des <img>-Elements geladen, sondern sind dennoch Teil des initialen Seitenladens. Sie beeinflussen einfach nicht das Timing des load-Ereignisses.

Das bedeutet, dass bei Auslösung von load möglicherweise alle lazy-geladenen Bilder, die sich im visuellen Viewport befinden, noch nicht sichtbar sind.

Verhindern von Elementverschiebungen während des Lazy-Loadings von Bildern

Wenn ein Bild, dessen Laden durch das loading-Attribut auf lazy verzögert wurde, schließlich geladen wird, bestimmt der Browser die endgültige Größe des <img>-Elements basierend auf dem Stil und der intrinsischen Größe des Bildes, und passt dann das Dokument bei Bedarf neu an, um die Positionen von Elementen basierend auf einer Größenänderung des Elements zu aktualisieren.

Um dieses Neuanpassen zu verhindern, sollten Sie die Präsentationsgröße des Bildes explizit mit den Attributen width und height des Bild-Elements angeben. Durch das Festlegen des intrinsischen Seitenverhältnisses auf diese Weise verhindern Sie, dass sich Elemente während des Ladens des Dokuments verschieben, was im besten Fall irritierend oder abschreckend sein kann und im schlimmsten Fall dazu führen kann, dass Nutzer das falsche Element anklicken, abhängig vom genauen Timing der verzögerten Ladevorgänge und Neuanpassungen.

Beispiele

Die unten gezeigte Funktion addImageToList() fügt ein Foto-Thumbnail zu einer Liste von Elementen hinzu und nutzt Lazy-Loading, um das Laden des Bildes aus dem Netzwerk zu vermeiden, bis es tatsächlich benötigt wird.

js
function addImageToList(url) {
  const list = document.querySelector("div.photo-list");

  let newItem = document.createElement("div");
  newItem.className = "photo-item";

  let newImg = document.createElement("img");
  newImg.loading = "lazy";
  newImg.width = 320;
  newImg.height = 240;
  newImg.src = url;

  newItem.appendChild(newImg);
  list.appendChild(newItem);
}

Spezifikationen

Specification
HTML Standard
# dom-img-loading

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch