Einen Blick auf den Zustand progressiver Bilder und die Benutzerwahrnehmung werfen

Veröffentlicht: 2022-03-10
Kurze Zusammenfassung ↬ Wir alle wollen Bilder schnell ins Web laden. Die Wahl des richtigen Bildformats, die Optimierung der Qualität und die Verwendung responsiver Bilder sind wichtige Aufgaben, aber was können wir darüber hinaus tun?

„Progressive Bilder“ ist heutzutage ein heißes Thema. Wir stoßen oft auf Artikel, in denen Techniken erklärt werden, wie man vermeiden kann, dass ein leerer Bereich angezeigt wird, in dem ein Bild geladen wird. Medium und Facebook sind Beispiele für Websites und mobile Apps, die dieses Muster anwenden.

Ich habe kürzlich über verschiedene Möglichkeiten geschrieben, SVG als Platzhalter zu verwenden, und der diesjährige Performance-Kalender von PerfPlanet enthielt zwei Posts, die SQIP näher beschreiben, eine Technik, die auf verschwommenen SVGs basiert: Progressive Image Loading using Intersection Observer und SQIP und SQIP — Vague Vectors for Performant Previews.

Als ich zum ersten Mal die Bildladetechnik von Medium dokumentierte, war ich hauptsächlich daran interessiert, ihre Technik nachzukonstruieren. Ich hatte den Effekt gesehen, als ich Medium auf einer langsamen Flugverbindung durchsuchte. Ich dachte, dass das frühe Rendern eines kleinen Bildes, Lazy-Load und der Übergang zur endgültigen Version eine gute Idee wäre.

Wir gehen davon aus, dass diese Techniken die wahrgenommene Leistung eines Nutzers verbessern . Schnelles Rendern schlägt langsames Rendern. Etwas frühzeitig auf den Bildschirm des Benutzers zu bringen, auch wenn es nicht der endgültige Inhalt ist.

Sind wir uns dessen sicher?

Als ich einige Kommentare auf Reddit durchgegangen bin, habe ich viele aufschlussreiche (und negative) Meinungen gefunden. Hier sind zwei davon:

„Ich hasse Websites, die eine verschwommene Version eines Bildes zeigen, bevor das endgültige geladen wird. Es spielt mit meinen Augen. Ich muss wegschauen und nachsehen, ob es fertig ist, bevor ich weiterlesen kann. Ich wünschte, es gäbe eine Möglichkeit, diese Funktion zu deaktivieren."
– rocky1138, Hacker-News
„Wie sind die Leute zu dem Schluss gekommen, dass das Anzeigen einer informationsarmen Version des zu ladenden Bildes als Platzhalter zu einer schneller wahrgenommenen Last führt? Für mich sehen all diese Effekte einfach nur Müll und ablenkend aus, ohne jeglichen Nutzen – sicherlich nicht die Wahrnehmung von Geschwindigkeit. Es ist sowieso nicht so, dass ich jemals verstehen kann, was das Bild wirklich ist, bevor es vollständig geladen ist, mit unserem ohne ausgefallenen Platzhalter."
– dwb, Hacker-News
Mehr nach dem Sprung! Lesen Sie unten weiter ↓

Der Versuch, Studien über die Wahrnehmung der Benutzer zu finden

Ich wollte einige wissenschaftliche Untersuchungen finden, die unterstützen könnten, dass diese Techniken zum Laden von Bildern vorteilhaft (oder nicht) waren. Dies erwies sich als Herausforderung. Ich konnte keine Studie finden, die beweist, dass das Anzeigen von so etwas wie einem verschwommenen Thumbnail, bevor das Bild geladen wird, die Wahrnehmung eines Benutzers verbessert. Dann dachte ich an progressive JPEGs.

Zurück zur Basis: Progressive JPEGs

In gewisser Weise haben wir seit langem eine ähnliche „progressive Bildladetechnik“ in Bildern hinterlegt. Progressives JPEG ist ein gutes Beispiel.

Progressive JPEGs wurden als bewährtes Verfahren für Bilder vorgeschlagen, insbesondere für Websites, die in langsamen Netzwerken verwendet werden. Ann Robson schrieb vor nunmehr fünf Jahren einen Beitrag, der Progressive JPEGs ermutigte, in dem sie zusammenfasste, warum sie überlegen waren:

„Progressive JPEGs sind besser, weil sie schneller sind. Schneller zu erscheinen bedeutet schneller zu sein, und die wahrgenommene Geschwindigkeit ist wichtiger als die tatsächliche Geschwindigkeit . Selbst wenn wir gierig darauf sind, was wir zu liefern versuchen, geben uns progressive JPEGs so schnell wie möglich so viel wie möglich."

Ein progressives JPEG kodiert das Bild in mehrere Scans. Der erste Scan rendert das vollständige Bild in niedriger Qualität und wird verfeinert, wenn weitere Scans gerendert werden. Eine Alternative ist der Baseline-Modus von JPEG, bei dem das Bild von oben nach unten dekodiert wird.

Baseline-Decodierung eines JPEG-Bildes
Baseline-Decodierung eines JPEG-Bildes.
Progressive Dekodierung eines JPEG-Bildes
Progressive Dekodierung eines JPEG-Bildes.

Nebenbei bemerkt, die JPEG-Codierung kann mit verschiedenen Scan-Skripten angepasst werden. Dies kann verwendet werden, um Bilder zu erstellen, die in einem Hybridmodus zwischen Baseline und Progressiv codiert sind.

Progressive Techniken wie Blur-up, SQIP ähneln progressiven JPEGs aus Sicht des Benutzers. Der Browser rendert zuerst ein Bild mit geringer Qualität und ersetzt es beim Laden durch das endgültige Bild.

Interessanterweise verwendet die überwiegende Mehrheit der JPEG-Bilder den Baseline-Modus. Laut einigen Quellen machen progressive JPEGs höchstens 7 % aller JPEGs aus. Wenn wir uns anscheinend einig sind, dass diese Techniken die wahrgenommene Leistung des Benutzers verbessern, warum werden progressive JPEGs nicht häufiger verwendet als Baseline-JPEGs?

Die Studium

Ich konnte nur eine Studie mit dem Titel „Progressive Image Rendering – Good or Evil?“ finden, die versucht, etwas Licht in dieses Thema zu bringen.

„Wenn, wie bei der Progressive JPEG-Methode, die Bildwiedergabe ein zweistufiger Prozess ist, bei dem ein anfänglich grobes Bild scharf fokussiert wird, wird die kognitive Flüssigkeit gehemmt und das Gehirn muss etwas härter arbeiten, um zu verstehen, was angezeigt wird .“

Laut der Studie fällt es Anwendern schwerer, progressive JPEGs zu verarbeiten, obwohl wir auf den ersten Blick denken würden, dass das Erlebnis besser ist.

Ich habe die Studie kürzlich in einem Gespräch über LQIP (Low-Quality Image Placeholders) erwähnt. Bald erhielt ich einige Antworten, die die Strenge der Studie in Frage stellten:

Bisher haben wir eine einzige Studie, die mit Skepsis aufgenommen wird. Was haben wir noch? Können wir die vorhandenen Tools verwenden, um die wahrgenommene Leistung als Proxy zu messen?

Wahrgenommene Ladezeit messen

Stellen Sie sich diese beiden hypothetischen Filmstreifen vor, die von einer Website aufgenommen wurden:

Ein Diagramm, das 2 hypothetische Filmstreifen für denselben Standort zeigt. Version A rendert leere Seiten und dann den gesamten Inhalt auf einmal. Version B zeigt beim Laden teilweise Inhalte an.
Ein Diagramm, das 2 hypothetische Filmstreifen für denselben Standort zeigt.

Die allgemeine Übereinstimmung besteht darin, dass der Benutzer feststellen wird, dass Version B schneller geladen wird als Version A. Dies liegt daran, dass Teile der Seite früher gerendert werden als in Version A.

In gewisser Weise ähnelt die Situation der von progressiven Bildern, jedoch in einem größeren Maßstab. Teilinhalt so früh wie möglich, auch wenn es noch nicht der letzte ist.

Eine Seitenladezeit von 1,2 Sekunden erzählt uns einen Teil der Geschichte, beschreibt aber nicht, was der Benutzer während dieser Zeit sieht. Heutzutage verwenden wir Metriken wie den Geschwindigkeitsindex, um zu bewerten, wie schnell eine Seite geladen wird. Der Geschwindigkeitsindex misst den Bereich der Seite, der visuell nicht vollständig ist. Dies geschieht auf mehreren Screenshots, die in Abständen aufgenommen werden. Je niedriger die Zahl, desto besser.

Speed-Index-Formel
Geschwindigkeitsindexformel (Quelle)

Wenn wir an Techniken zum progressiven Laden von Bildern denken, wie wird der Geschwindigkeitsindex variieren, wenn das Bild geladen wird? Wird dieser Bereich als „visuell abgeschlossen“ betrachtet, wenn wir einen Platzhalter von geringer Qualität verwenden?

Anfänglich misst der Geschwindigkeitsindex den Fortschritt, indem er die Entfernung von Histogrammen vergleicht, eines für jede Primärfarbe (Rot, Grün, Blau). Dies wird als mittlere Histogrammdifferenz bezeichnet. Das Ziel ist, zu verhindern, dass Änderungen wie Reflows, bei denen alle Elemente auf der Seite um ein paar Pixel verschoben werden, einen großen Einfluss auf die Berechnung haben. Weitere Informationen zum Algorithmus finden Sie im Abschnitt Visueller Fortschritt messen des Speed ​​Index-Dokuments.

Ich habe mich entschieden, Webpagetest gegen eine Seite zu testen, die Platzhalter von geringer Qualität anzeigt (siehe Bericht zu WebPageTest):

Filmstreifen mit visuellem Vollständigkeitsprozentsatz
Filmstreifen mit visuellem Vollständigkeitsprozentsatz (siehe Bericht zu WebPageTest).

Wir können feststellen, dass das Bild zwischen Sekunde 8 und 10 geladen wird. Der unscharfe Platzhalter erhöht den Prozentsatz der visuellen Vollständigkeit von 75 % auf 83 %. Das Laden des endgültigen Bildes dauert von 83 % auf 93 %.

Wir sehen, dass ein Platzhalter zur visuellen Vollständigkeit der Seite beiträgt, gemessen am Geschwindigkeitsindex. Wir können auch beobachten, dass der Platzhalter nicht als vollständig visuell vollständiger Bereich zählt.

Der Geschwindigkeitsindex ist nicht die einzige Metrik, die wir verwenden können, um zu messen, wie schnell unsere Seite gerendert wird. Chrome Developer Tools enthält eine Option zur Durchführung einer Leistungsprüfung. Gehen Sie zu AuditsPerform an auditCheck 'Performance' prüfen → Run audit .

Das Ausführen eines Audits generiert einen Bericht wie diesen:

Ein Foto eines Telefons, das eine Story auf Medium lädt und einen verschwommenen Platzhalter zeigt.
Laden einer Story auf Medium. Beachten Sie den verschwommenen Bildplatzhalter, der später in das endgültige Bild eingeblendet wird.

Eine der gemeldeten Metriken ist der „Wahrnehmungsgeschwindigkeitsindex“. In diesem Lauf beträgt der Wert 4,245 . Aber was genau bedeutet dieser Begriff? Ist es dasselbe wie der „Geschwindigkeitsindex“ von Webpagetest?

Der Ansatz von Speed ​​Index zur Messung der pixelweisen Ähnlichkeit, auch „Mean Histogram Difference“ genannt, hat einige Nachteile. Das MHD erfasst keine visuelle Wahrnehmung von Form, Farbe oder Objektähnlichkeit.

Vier verschiedene Formen mit gleicher Menge an schwarzen und weißen Pixeln.
Vier verschiedene Formen mit gleicher Menge an schwarzen und weißen Pixeln.

In den meisten Fällen macht dies keinen großen Unterschied, wenn eine visuelle Vollständigkeitsbewertung durchgeführt wird. In der Praxis weisen der Speed ​​Index sowie der Perceptual Speed ​​Index eine hohe Korrelation auf:

„In groß angelegten empirischen Studien, die wir durchgeführt haben (unter Verwendung von über 500 Alexa-Top-Videos von mobilen Webseiten, die über WebPagetest gesammelt wurden), stellen wir fest, dass SI und PSI linear korrelieren (bei 0,91, um genau zu sein).“ — Perceptual Speed ​​Index (PSI) zur Messung der Above-the-Fold-Webleistung

Wahrnehmungsgeschwindigkeitsindex

Laut der Lighthouse-Dokumentation von Google wird der Perceptual Speed ​​Index mithilfe eines Knotenmoduls namens Speedline berechnet. Dieses Paket berechnet den wahrnehmungsbezogenen Geschwindigkeitsindex auf der Grundlage des gleichen Prinzips wie der ursprüngliche Geschwindigkeitsindex, aber es berechnet den visuellen Fortschritt zwischen Frames mithilfe von SSIM anstelle der Histogrammentfernung .

SSIM (Structural Similarity) wird verwendet, um die Ähnlichkeit zwischen zwei Bildern zu messen. Diese Methode versucht zu modellieren, wie Menschen Bilder wahrnehmen, und erfasst Form, Farbe und Objektähnlichkeit. SSIM hat andere interessante Anwendungen: Eine davon ist die Optimierung der Bildkomprimierungseinstellungen, wie z. B. cjpeg-dssim, das die höchste JPEG-Komprimierungsstufe wählt und ein Bild mit einem ausreichend nahen SSIM erzeugt.

Unten sehen Sie die Image SSIM JS-Ergebnisse für SVG-Bilder, die mit Primitive erstellt wurden. Je mehr Formen wir verwenden, desto näher kommt es dem Originalbild (SSIM = 1).

Zwei Bilder reproduziert mit 100 und 10 Dreiecken. Mehr Formen machen das Bild dem Original ähnlicher.
Zwei Bilder, die mit Dreiecken reproduziert wurden. Mehr Formen machen das Bild dem Original ähnlicher.

Neuere Alternativen zu SSIM sind butteraugli (verwendet von Guetzli, Googles Perceptually Guided JPEG Encoder) und SSIMULACRA (verwendet von Cloudinary).

Fazit

Es gibt keine einfache Möglichkeit, die Wahrnehmung eines Benutzers über das Laden eines Bildes im Laufe der Zeit zu synthetisieren. Wir sind von dem Bauchgefühl getrieben, dass es besser ist, früher zu zeigen, auch wenn es nicht der endgültige Inhalt ist, obwohl einige Benutzer anderer Meinung sein werden.

Als Entwickler müssen wir die Leistung messen . Nur so können wir uns Ziele zur Verbesserung setzen und wissen, wann wir ein Leistungsbudget nicht einhalten. Der Vorteil, auf progressives Laden von Bildern zu setzen, besteht darin, dass wir es mit Tools messen können, die auf der Wahrnehmung des Benutzers basieren. Sie geben uns einen Score, sie sind reproduzierbar und skalierbar. Sie passen in unseren Workflow und unsere Tools und sind hier, um zu bleiben.

Als Webentwickler sollten wir uns mehr um das Ladeerlebnis der von uns erstellten Websites kümmern. Es ist großartig, dass wir jetzt Tools wie WebPageTest und Lighthouse haben, die uns helfen können, die Wirkung der progressiven Bildladetechniken einfach zu messen. Keine weiteren Entschuldigungen!