Wichtige Leistungsprobleme

Im Moment sind Bilder in Bezug auf die Gesamtgröße der Übertragung die größten Assets im Web. und die Anzahl der Anfragen pro Seite. Die durchschnittliche Übertragungsgröße der Webseite beträgt ungefähr 2 MB (Stand: Juni 2022), wobei fast die Hälfte davon nur mit Bildern stammt. Keine Übertreibung dass die Optimierung von Bildanfragen die wichtigste Leistungsoptimierung ist, die Sie vornehmen können.

Später erfahren Sie, wie sich responsive Bilder weiterentwickelt haben, um die Probleme zu lösen, die entstehen, wenn versucht wurde, ein Bild für alle Eventualitäten bereitzustellen. In diesem Abschnitt lernen Sie wichtige Leistungsmesswerte für Bilder kennen und erfahren, wie Sie sie verbessern können.

Image-Anfragen verschieben

Sie lernen verschiedene Methoden kennen, mit denen Sie möglichst kleine und effiziente Bildanfragen erhalten. wird nie etwas zustande kommen. Ich möchte gleich zu Beginn darüber sprechen, was die wichtigste Änderung sein könnte, stellen Sie Ihren Nutzern Bild-Assets bereit: das Attribut loading="lazy".

<img src="image.jpg" loading="lazy" alt="…">

Dieses Attribut stellt sicher, dass Bilder erst angefordert werden, wenn sie sich nah am Darstellungsbereich des Nutzers befinden, wodurch sie vom ursprünglichen Darstellungsbereich des Nutzers zurückgestellt werden. Seitenaufbau – also die Zeit, zu der der Browser die höchste Auslastung erreicht hat – und das Entfernen dieser Anfragen aus dem kritischen Rendering-Pfad.

So einfach es in der Praxis auch sein mag, kann die Verwendung dieses Attributs große positive Auswirkungen auf die Leistung haben: Ein Bild, das niemals Der Darstellungsbereich des Nutzers wird nie angefordert und es wird keine Bandbreite für Bilder verschwendet, die der Nutzer nie sehen wird.

Es gibt jedoch einen Haken: Durch das Zurückstellen dieser Anfragen werden die hyperoptimierte Prozesse für das Anfordern von so früh wie möglich. Wenn loading="lazy" für img-Elemente im oberen Bereich des Layouts verwendet wird – und daher wahrscheinlicher im Darstellungsbereich des Nutzers erscheinen, wenn die Seite zum ersten Mal geladen wird. Diese Bilder können sich für den Endnutzer erheblich langsamer anfühlen.

Abrufpriorität

Das Attribut loading ist ein Beispiel für eine Initiative mit umfassenderen Webstandards, die Entwicklern mehr Kontrolle darüber geben soll, wie Webbrowser Anfragen zu priorisieren.

Wahrscheinlich sind Ihnen die grundlegende Ansätze zur Abrufpriorität: Beispielsweise wird eine Anfrage für eine externe CSS-Datei im <head> eines Dokuments als wichtig genug betrachtet, um das Rendering zu blockieren, während eine Anfrage für eine externe JavaScript-Datei direkt über </body> werden verzögert, bis das Rendern abgeschlossen ist. Wenn der Wert eines loading-Attributs für <img> „lazy“ ist, Die zugehörige Bildanforderung wird zurückgestellt, bis der Browser bestimmt, dass sie einem Nutzer angezeigt wird. Andernfalls hat das Bild denselben Priorität wie jedes andere Bild auf der Seite.

Mit dem Attribut fetchpriority können Sie Entwicklungsteams genauere Kontrolle über die Priorität von Assets, sodass Sie Ressourcen kennzeichnen können als 'hoch' und „niedrig“ Priorität im Verhältnis zu Ressourcen desselben Typs. Die Anwendungsfälle für fetchpriority ähneln denen loading wenn auch viel breiter wird. Sie können beispielsweise fetchpriority="low" für ein Bild verwenden, das nur nach einer Nutzerinteraktion sichtbar ist (ob dieses Bild in den Darstellungsbereich des Nutzers fällt oder nicht), um sichtbare Bilder an anderer Stelle auf der Seite zu priorisieren, oder fetchpriority="high" , um ein Bild zu priorisieren, von dem Sie wissen, dass es sofort nach dem Rendern der Seite im Darstellungsbereich sichtbar ist.

Hinweis: fetchpriority unterscheidet sich von loading insofern, als sich das Browserverhalten nicht grundlegend ändert. Der Browser erhält keine Anweisungen, bestimmte Assets vor anderen zu laden. Stattdessen erhalten sie einen wichtigen Kontext für die Entscheidungen, die in Bezug auf die Anforderung von Assets getroffen werden.

Wirkung von Bildern messen

Bei der Optimierung von Bild-Assets ist die wahrgenommene Leistung oft wichtiger und schwieriger zu messen als die gesamte Übertragung. für die Größe anpassen.

Web Vitals bieten messbare, umsetzbare Messwerte und Hinweise zur Verbesserung der Erfahrungen des Webs und hebt Probleme hervor, wie lange Antwortzeiten eines Webservers, Renderingprobleme und Interaktivitätsverzögerungen. Core Web Vitals sind eine Teilmenge dieser Ziele, insbesondere auf die direkte Erfahrung eines Nutzers mit einer einzelnen Seite. Dabei handelt es sich um eine Reihe technischer Messwerte, die zusammen bestimmen, wie schnell sich eine Erfahrung für einen Nutzer anfühlt.

Cumulative Layout Shift

Cumulative Layout Shift (CLS) ist ein Maß für die visuelle Stabilität. Mit diesem Messwert wird erfasst, Das Layout der Inhalte auf einer Seite verschiebt sich, wenn Assets geladen und die Seite gerendert wird. Alle, die viel Geld ausgegeben haben der Zeit, die das Web nutzt, haben während der langen Textdauer ihren Platz verloren, weil eine Seite "gesprungen" ist. da eine Webfont- oder Bildquelle plötzlich gerendert werden oder ein interaktives Element plötzlich von Ihrem Zeiger wegbewegt ist. Ein hoher CLS-Wert ist im besten Fall ein Ärgernis, Nutzerfehler – im schlimmsten Fall ein „Abbrechen“ Schaltfläche, die sich in einen Bereich verschiebt, in dem zuvor ein „Bestätigen“- Schaltfläche, wie Nutzende auf die Schaltfläche klicken.

Aufgrund der hohen Ladezeiten und des großen Platzes, den sie in einem Layout einnehmen können, liegt es nahe, dass Bilder eine häufige Ursache von hohen CLS-Werten.

Aufgrund der relativ jüngsten Änderungen in modernen Browsern ist es einfacher, als Sie vielleicht denken, hohe CLS-Werte aufgrund von Bildern zu vermeiden.

Wenn Sie seit einigen Jahren am Front-End arbeiten, sind Sie mit den Attributen width und height auf <img> vertraut: Vor der groß angelegten Einführung von Preisvergleichsportalen waren diese die einzige Möglichkeit, die Größe eines Bildes zu steuern.

<img src="image.jpg" height="200" width="400" alt="…">

Diese Attribute wurden nicht mehr verwendet, um unsere stilistischen Anforderungen von unserem Markup getrennt zu halten. Dies gilt insbesondere für responsive Aufgrund des Webdesigns war es notwendig, über CSS eine prozentbasierte Größenanpassung zu definieren. In den Anfängen des responsiven Webdesigns die nicht verwendeten Attribute width und height da die Werte, die wir in unserem CSS angegeben haben – max-width: 100% und height: auto.

<img src="image.jpg" alt="…">
img {
  max-width: 100%;
  height: auto;
}

Nachdem die Attribute height und width wie im vorherigen Beispiel entfernt wurden, kann der Browser nur noch diese Methode ermitteln. Die Höhe des Bilds besteht in dieser Situation darin, die Quelle anzufordern, zu parsen und mit dem eigentlichen Seitenverhältnis zu rendern, basierend auf dem Breite der Fläche, die er im Layout einnimmt, nachdem Stylesheets angewendet wurden. Dieser Vorgang findet größtenteils statt, nachdem die Seite wobei die neu berechnete Höhe zusätzliche Layoutverschiebungen verursacht.

Ab 2019 wurde das Browserverhalten aktualisiert, um die Attribute width und height unterschiedlich zu verarbeiten. Anstatt die Werte dieser Felder zu verwenden, Attribute verwenden, um die feste, pixelbasierte Größe eines img-Elements im Layout zu bestimmen, können diese Attribute Das Seitenverhältnis des Bildes, wobei die Syntax dieselbe ist. Moderne Browser dividieren diese Werte, um das intrinsische Seitenverhältnis eines img-Elements vor dem Rendern der Seite bestimmen, sodass es den Platz reserviert, den das Bild beim Rendern des Layouts einnimmt.

In der Regel sollten Sie die Attribute height und width für <img> mit Werten verwenden, die der intrinsischen Größe Ihrer Bildquelle entsprechen. solange Sie sicherstellen, dass Sie height: auto neben max-width: 100% angegeben haben, um die Höhe aus dem HTML-Attribut zu überschreiben.

<img src="image.jpg" height="200" width="400" alt="…">
img {
  max-width: 100%;
  height: auto;
}

Wenn Sie die Attribute width und height für die <img>-Elemente verwenden, können Sie einen hohen CLS-Wert aufgrund von Bildern vermeiden.

Bei diesem Ansatz gibt es keine Nachteile, da er auf dem bewährten Browserverhalten basiert – also in jedem Browser. mit Unterstützung für einfachen CSS-Code funktioniert wie gewohnt, wobei die Attribute height und width in Ihrem Markup durch Ihre Stile überschrieben werden.

Mit den Attributen width und height lassen sich CLS-Probleme problemlos vermeiden, da der nötige Layoutraum für Ihre Bilder reserviert wird. Nutzer mit leerer Lücke oder Platzhalter von geringer Qualität, während und warten, bis ein Bild übertragen wurde, ist ebenfalls nicht ideal. Es gibt Dinge, die Sie tun können, um das Messbare und Auswirkungen von langsam ladenden Bildern ist die einzige Möglichkeit, ein vollständig gerendertes Bild einem Nutzer schneller zu präsentieren, indem die Übertragungsgröße reduziert wird.

Largest Contentful Paint

Largest Contentful Paint (LCP) misst die Zeit, die benötigt wird, um das größte „contentful“-Element, das im Darstellungsbereich des Nutzers sichtbar ist, zu rendern: Inhaltselement, das den größten Prozentsatz der sichtbaren Seite einnimmt. Es mag auf den ersten Blick vielleicht wie ein zu spezifischer Messwert erscheinen, -Element dient aus der Perspektive des Nutzers als praktischer Proxy für den Punkt, an dem der Großteil der Seite gerendert wurde. Der LCP ist ein entscheidender ein Maß für die (wahrgenommene) Leistung.

Messwerte wie DOMContentLoaded oder das window.onload-Ereignis können nützlich sein, um zu ermitteln, wann der Ladeprozess der aktuellen Seite erfolgt. technisch abgeschlossen ist, entsprechen jedoch nicht unbedingt der User Experience der Seite. Eine leichte Verzögerung beim Rendern eines Elements außerhalb des Darstellungsbereichs des Nutzers würden bei beiden Messwerten berücksichtigt, von echten Nutzern jedoch wahrscheinlich nicht erkannt werden. Ein langer LCP bedeutet, dass der erste Eindruck des Nutzers von einer Seite – dem wichtigsten Inhalt innerhalb des aktuellen Darstellungsbereichs – ist, dass die Seite langsam ist. oder komplett aufgeschlüsselt werden.

Die vom LCP erfasste Wahrnehmung der Nutzer wirkt sich direkt auf die Nutzererfahrung aus. Ein Experiment von Vodafone erst letztes Jahr fanden heraus, dass eine Verbesserung des LCP um 31% nicht nur zu 8% mehr Umsatz führte – allein ein starkes Ergebnis –, sondern auch 15 % für die Gesamtzahl der Nutzer verzeichneten. Steigerung der Anzahl der Besucher, die zu potenziellen Kunden wurden („Visitor-to-Lead-Rate“), und eine Verbesserung der Nutzeranzahl um 11 %. die ihren Einkaufswagen besucht haben ("cart-to-visit-Rate").

Auf mehr als 70% der Webseiten ist das größte Element am Anfang Der Darstellungsbereich beinhaltet ein Bild, entweder als eigenständiges <img>-Element oder als Element mit einem Hintergrundbild. Mit anderen Worten: 70% der Seiten Der LCP-Wert basiert auf der Bildleistung. Warum ist nicht viel Vorstellungskraft, um zu sehen, warum das so ist: groß, Aufmerksamkeit erregt dass sich Bilder und Logos mit hoher Wahrscheinlichkeit „above the fold“ befinden.

LCP wird in der Konsole einer web.dev-Seite hervorgehoben

Es gibt verschiedene Möglichkeiten, LCP-Verzögerungen zu vermeiden: Geben Sie loading="lazy" niemals für „above the fold“ (ohne Scrollen sichtbar) an. Bild, Das Verzögern der Anfrage bis zu dem Zeitpunkt, zu dem die Seite gerendert wurde, hat wahrscheinlich erhebliche negative Auswirkungen auf den LCP-Wert. Zweitens kann der Browser durch die Verwendung von fetchpriority="high" darüber informiert werden, dass die Übertragung dieses Bildes über Bildern an anderer Stelle auf der Seite priorisiert werden sollte.

Um den LCP-Wert einer Seite zu verbessern, sollten Sie vor allem die Zeit zum Übertragen und Rendern dieser Bilder dauert. Halten Sie dazu Ihre Bildquellen so klein und effizient wie und sicherzustellen, dass den Nutzern nur die Bild-Assets zur Verfügung stehen, mit denen Sie für ihre Browserkontexte.

Fazit

Bild-Assets entlasten die Nutzer am stärksten. Bandbreite – das ist die Bandbreite, die bei der Übertragung aller anderen erforderlichen Assets um eine Seite zu rendern. Bilder verursachen erhebliche Probleme in Bezug auf die wahrgenommene Leistung, sowohl während als auch nach der sie umgebenden Seite. Layout wurde gerendert. Kurz gesagt: Bild-Assets beschädigen.

So abschreckend das auch sein mag, obwohl „das Web mit weniger Bildern besser wäre“ allein im Hinblick auf die Leistung gilt, würde es seinen Nutzern auch einen enormen Bösservice bereiten. Bilder sind ein wichtiger Bestandteil des Webs und Sie sollten keine Kompromisse bei der Qualität nur um die Leistung zu steigern.

Im weiteren Verlauf dieses Kurses lernen Sie die Technologien kennen, auf denen unsere Bild-Assets basieren, und Sie lernen Techniken kennen, mit denen Sie ohne Einbußen bei der Qualität.