Aruncați o privire asupra stării imaginilor progresive și percepției utilizatorului

Publicat: 2022-03-10
Rezumat rapid ↬ Cu toții vrem să încărcăm imagini rapid pe web. Alegerea formatului de imagine potrivit, optimizarea calității și utilizarea imaginilor receptive sunt sarcini importante, dar ce putem face dincolo de asta?

„Imaginile progresive” este un subiect fierbinte în aceste zile. De multe ori întâlnim articole care explică tehnici despre cum să evitați afișarea unui spațiu gol în care se va încărca o imagine. Medium și Facebook sunt exemple de site-uri web și aplicații mobile care aplică acest model.

Am scris recent despre diferite moduri de a folosi SVG ca substituenți, iar Calendarul de performanță al lui PerfPlanet din acest an a inclus două postări care descriu în continuare SQIP, o tehnică bazată pe SVG-uri neclare: Încărcare progresivă a imaginii utilizând Observatorul de intersecție și SQIP și SQIP — Vectori vagi pentru previzualizări performante.

Când am documentat pentru prima dată tehnica de încărcare a imaginii de la Medium, am fost mai ales interesat de inginerie inversă a tehnicii lor. Văzusem efectul navigând Medium pe o conexiune lentă în zbor. M-am gândit că redarea devreme a unei imagini mici, încărcarea leneșă și trecerea la versiunea finală a fost o idee bună.

Presupunem că aceste tehnici îmbunătățesc performanța percepută de utilizator . Redarea rapidă bate randarea lentă. Punerea devreme a ceva pe ecranul utilizatorului, chiar dacă nu este conținutul final.

Suntem siguri de asta?

Parcurgând câteva comentarii pe Reddit, am găsit o mulțime de opinii perspicace (și negative). Iată două dintre ele:

„Urăsc site-urile web care arată o versiune neclară a unei imagini înainte ca cea finală să se încarce. Se joacă cu ochii mei. Trebuie să mă uit în altă parte și să mă uit să văd dacă s-a terminat înainte de a putea citi mai departe. Mi-aș dori să existe o modalitate de a dezactiva această funcționalitate.”
— rocky1138, Hacker News
„Cum au ajuns oamenii la concluzia că afișarea unei versiuni cu informații reduse a imaginii care urmează să fie încărcată ca substituent are ca rezultat o încărcare percepută mai rapidă? Pentru mine, toate aceste efecte mi se par aiurea și care distrag atenția, fără niciun beneficiu - cu siguranță nu percepția vitezei. Nu este ca și cum aș putea să înțeleg vreodată ce este imaginea cu adevărat înainte de a fi încărcată complet oricum, cu un substituent fără lux.”
— dwb, Hacker News
Mai multe după săritură! Continuați să citiți mai jos ↓

Încercarea de a găsi studii despre percepția utilizatorilor

Am vrut să găsesc niște cercetări științifice care să susțină că aceste tehnici de încărcare a imaginilor sunt (sau nu) benefice. Aceasta s-a dovedit a fi o provocare. Nu am putut găsi niciun studiu care să demonstreze că afișarea a ceva ca o miniatură neclară înainte de încărcarea imaginii îmbunătățește percepția utilizatorului. Apoi m-am gândit la JPEG progresive.

Înapoi la bază: JPEG progresive

Într-un anumit fel, am avut o „tehnică de încărcare progresivă a imaginii” similară susținută în imagini de mult timp. JPEG progresiv este un bun exemplu.

JPEG-urile progresive au fost propuse ca o bună practică pentru imagini, în special pentru site-urile utilizate în rețele lente. Ann Robson a scris o postare în care încurajează JPEG-urile progresive, acum cinci ani, unde a rezumat de ce au fost superioare:

„JPEG-urile progresive sunt mai bune pentru că sunt mai rapide. A apari mai repede înseamnă a fi mai rapid, iar viteza percepută este mai importantă decât viteza reală . Chiar dacă suntem lacomi de ceea ce încercăm să oferim, JPEG-urile progresive ne oferă cât mai mult posibil cât mai curând posibil.”

Un JPEG progresiv codifică imaginea în mai multe scanări. Prima scanare redă imaginea completă la calitate scăzută și este rafinată pe măsură ce sunt randate mai multe scanări. O alternativă este modul de bază JPEG în care imaginea este decodificată de sus în jos.

Decodificarea de bază a unei imagini JPEG
Decodificarea de bază a unei imagini JPEG.
Decodificare progresivă a unei imagini JPEG
Decodificare progresivă a unei imagini JPEG.

Ca o notă secundară, codificarea JPEG poate fi personalizată folosind diferite scripturi de scanare. Aceasta poate fi folosită pentru a crea imagini care sunt codificate într-un mod hibrid între linia de bază și progresivă.

Tehnicile progresive precum Blur-up, SQIP seamănă cu JPEG progresiv din punctul de vedere al percepției utilizatorului. Browserul redă mai întâi o imagine de calitate scăzută și o înlocuiește cu imaginea finală când se încarcă.

În mod interesant, marea majoritate a imaginilor JPEG utilizează modul de bază. Potrivit unor surse, JPEG-urile progresive reprezintă cel mult 7% din totalul JPEG-urilor. Dacă se pare că suntem de acord că aceste tehnici îmbunătățesc performanța percepută de utilizator, de ce nu sunt JPEG-urile progresive utilizate mai pe scară largă decât JPEG-urile de bază?

Studiul

Am găsit doar un studiu numit „Redarea progresivă a imaginii – bine sau rău?”, care a încercat să arunce o lumină asupra acestui subiect.

„Când, ca și în cazul metodei Progressive JPEG, redarea imaginii este un proces în două etape în care o imagine inițial grosieră se focalizează clar, fluența cognitivă este inhibată, iar creierul trebuie să lucreze puțin mai mult pentru a înțelege ceea ce este afișat. .”

Potrivit studiului, utilizatorilor le este mai dificil să proceseze JPEG progresiv, chiar dacă la prima vedere am crede că experiența este mai bună.

Am menționat recent studiul într-o conversație despre LQIP (Low-Quality Image Placeholders). În curând, am primit câteva răspunsuri care puneau la îndoială rigoarea studiului:

Până acum avem un singur studiu care este primit cu scepticism. Ce altceva avem? Putem folosi instrumentele existente pentru a măsura performanța percepută ca proxy?

Măsurarea timpului de încărcare perceput

Imaginează-ți aceste două benzi de film ipotetice înregistrate de pe un site:

O diagramă care arată 2 benzi de film ipotetice pentru același site. Versiunea A redă paginile goale și apoi tot conținutul simultan. Versiunea B arată conținut parțial pe măsură ce se încarcă.
O diagramă care arată 2 benzi de film ipotetice pentru același site.

Acordul general este că utilizatorul va percepe că versiunea B se încarcă mai repede decât versiunea A. Acest lucru se datorează faptului că părți ale paginii sunt redate mai devreme decât în ​​versiunea A.

Într-un fel, situația este similară cu cea a imaginilor progresive, dar la o scară mai mare. Conținut parțial cât mai devreme posibil, deși nu este cel final.

Un timp de încărcare a paginii de 1,2 secunde ne spune o parte din poveste, dar nu descrie ceea ce vede utilizatorul în acel timp. În zilele noastre, folosim valori precum Speed ​​Index pentru a evalua cât de repede se încarcă o pagină. Speed ​​Index măsoară zona paginii care nu este completată vizual. Acest lucru se face pe mai multe capturi de ecran făcute la intervale. Cu cât numărul este mai mic, cu atât mai bine.

Formula indicelui de viteză
Formula indicelui de viteză (sursă)

Dacă ne gândim la tehnicile de încărcare progresivă a imaginii, cum va varia Speed ​​Index pe măsură ce imaginea se încarcă? Va fi acea zonă considerată „finalizată vizual” dacă folosim un substituent de calitate scăzută?

Inițial, Speed ​​Index a măsurat progresul comparând distanța histogramelor, câte una pentru fiecare culoare primară (roșu, verde, albastru). Aceasta se numește diferență de histogramă medie. Scopul este de a preveni modificări precum reflow-urile, în care toate elementele de pe pagină sunt deplasate cu câțiva pixeli, să nu aibă un impact mare asupra calculului. Pentru mai multe informații despre algoritm, citiți secțiunea Măsurarea progresului vizual din documentul Speed ​​Index.

Am decis să încerc Webpagetest pe o pagină care afișează substituenți de calitate scăzută (vezi raportul despre WebPageTest):

Bandă de film care arată procentul completității vizuale
Bandă de film care arată procentul completității vizuale (vezi raportul pe WebPageTest).

Putem observa că între secunda 8 și 10 se încarcă imaginea. Substituentul neclar crește procentul de completitate vizuală de la 75% la 83%. Încărcarea imaginii finale o duce de la 83% la 93%.

Vedem că un substituent contribuie la completitudinea vizuală a paginii, măsurată de Speed ​​Index. De asemenea, putem observa că substituentul nu contează ca o zonă complet completă din punct de vedere vizual.

Indexul de viteză nu este singura măsurătoare pe care o putem folosi pentru a obține o măsură a cât de repede se redă pagina noastră. Chrome Developer Tools include o opțiune pentru a efectua un audit de performanță. Accesați AuditsPerform an auditCheck 'Performance'Run audit .

Efectuarea unui audit generează un raport ca acesta:

O fotografie a unui telefon care încarcă o poveste pe Medium, care arată un substituent neclar.
Se încarcă o poveste pe Medium. Rețineți că substituentul imaginii neclare care se estompează ulterior în imaginea finală.

Una dintre valorile raportate este „Indexul vitezei de percepție”. În această rulare, valoarea este 4,245 . Dar ce înseamnă mai exact acest termen? Este același cu „Indexul de viteză” al Webpagetest?

Abordarea Speed ​​Index de a măsura asemănarea pixelilor, numită și „Diferența medie a histogramei”, are unele dezavantaje. MHD nu surprinde percepția vizuală a formei, culorii sau asemănării obiectelor.

Patru forme diferite cu o cantitate egală de pixeli alb-negru.
Patru forme diferite cu o cantitate egală de pixeli alb-negru.

În cele mai multe cazuri, acest lucru nu va face o mare diferență atunci când rulați o evaluare vizuală a completității. În practică, indicele de viteză, precum și indicele de viteză perceptivă au o corelație ridicată:

„În studiile empirice pe scară largă pe care le-am efectuat (folosind peste 500 de videoclipuri ale paginilor web mobile de top Alexa colectate prin WebPagetest), constatăm că SI și PSI sunt corelate liniar (la 0,91, pentru a fi precis).” — Indexul vitezei de percepție (PSI) pentru măsurarea performanței web deasupra plierii

Indicele de viteză perceptivă

Conform documentației Google Lighthouse, indicele de viteză perceptivă este calculat folosind un modul nod numit Speedline. Acest pachet calculează indicele de viteză perceptivă, pe baza aceluiași principiu ca și indicele de viteză original, dar calculează progresia vizuală între cadre utilizând SSIM în loc de distanța histogramă .

SSIM (Structural Similarity) este folosit pentru a măsura asemănarea dintre două imagini. Această metodă încearcă să modeleze modul în care ființele umane percep imaginile și surprinde forma, culoarea și asemănarea obiectelor. SSIM are și alte aplicații interesante: Una dintre ele este optimizarea setărilor de compresie a imaginii, cum ar fi cjpeg-dssim care alege cel mai înalt nivel de compresie JPEG și generează o imagine cu un SSIM suficient de apropiat.

Mai jos puteți vedea scorurile Image SSIM JS pentru imaginile SVG create folosind Primitive. Cu cât folosim mai multe forme, cu atât este mai aproape de imaginea originală (SSIM = 1).

Două imagini reproduse folosind 100 și 10 triunghiuri. Mai multe forme fac imaginea mai asemănătoare cu cea originală.
Două imagini reproduse folosind triunghiuri. Mai multe forme fac imaginea mai asemănătoare cu cea originală.

Alternative mai recente la SSIM sunt butteraugli (folosit de Guetzli, codificatorul JPEG cu ghidaj perceptiv de la Google) și SSIMULACRA (folosit de Cloudinary).

Concluzie

Nu există o modalitate simplă de a sintetiza percepția unui utilizator asupra încărcării unei imagini în timp. Suntem motivați de sentimentul că arătați mai devreme este mai bine, chiar dacă nu este conținutul final, deși unii utilizatori nu vor fi de acord.

În calitate de dezvoltatori, trebuie să măsurăm performanța . Este singurul mod în care putem stabili obiective pentru a-l îmbunătăți și știm când nu atingem un buget de performanță. Avantajul de a paria pe încărcarea progresivă a imaginii este că o putem măsura cu instrumente care se bazează pe percepția utilizatorului. Ne dau un scor, sunt reproductibile și scalabile. Se potrivesc în fluxul de lucru și instrumentele noastre și sunt aici pentru a rămâne.

În calitate de dezvoltatori web, ar trebui să ne pese mai mult de experiența de încărcare a site-urilor web pe care le construim. Este grozav că acum avem instrumente precum WebPageTest și Lighthouse care ne pot ajuta să măsurăm cu ușurință efectul utilizării tehnicilor de încărcare progresivă a imaginilor. Fără alte scuze!