26 sep. 2018

Afbeeldingen optimaliseren voor web en performance

Verklein bestandsgrootte met jpegoptim, optipng, pngcrush en pngquant

Een manier om je website sneller te maken is door hem kleiner te maken. Niet met kleine lettertypes, maar met minder bytes! Meer dan de helft van het gewicht van een gemiddelde website wordt veroorzaakt door afbeeldingen. Toch optimaliseren maar heel weinig mensen hun afbeeldingen voor het web en de prestaties, tijd om te ontdekken hoeveel bytes je kunt besparen!

Optimaliseer je website

Als je je website optimaliseert, laadt deze sneller. Omdat veel mensen snelle websites prefereren, zijn zoekmachines zoals Google begonnen met het meten van de paginasnelheid om de ranking van je website in de zoekresultaten te bepalen.

Gemiddelde paginagrootte

Hoewel veel websitebouwers zich eerst richten op HTML en scripts, bestaat het grootste deel van het gewicht van een gemiddelde website uit afbeeldingen (Bron HttpArchive pagina gewicht september 2018).

Gemiddeld webpagina-gewicht, verdeeld per bestandstype (HttpArchive, september 2018)
Gemiddeld webpagina-gewicht, verdeeld per bestandstype (HttpArchive, september 2018)

Een effectieve afbeeldingsoptimalisatie kan daarom ongelooflijke effecten hebben op de snelheid van je website.

Wat is afbeeldingsoptimalisatie?

Een digitale afbeelding is als een schaakbord, een rechthoek met 8x8 zwarte en witte vierkanten. Als je het schaakbord ongecomprimeerd zou opslaan, zou je de kleur van elk vierkant afzonderlijk opschrijven ("vierkant één is wit, vierkant twee is zwart, vierkant drie is wit, vierkant vijf is zwart, enz."). Het zou 64 regels kosten om het hele bord te beschrijven, hoewel nauwkeurig is dit niet erg efficiënt.

Bitmap-afbeeldingen zijn als schaakborden, waarbij de pixels de vierkanten zijn
Bitmap-afbeeldingen zijn als schaakborden, waarbij de pixels de vierkanten zijn

Afbeeldingsoptimalisatie is het vinden van efficiëntere manieren om de kleuren van een afbeelding te beschrijven. Je zou het hele schaakbord in één regel tekst kunnen beschrijven: "wissel af tussen zwart en wit, begin met wit", of nog efficiënter: "herhaal wit, zwart". Bij digitale afbeeldingen wordt dit compressie genoemd, het algoritme probeert reeksen van terugkerende kleuren te identificeren.

Er zijn verschillende algoritmen die allemaal hun sterke en zwakke punten hebben. Sommige presteren beter op foto's (met miljoenen kleuren), terwijl anderen beter presteren met afbeeldingen met minder verschillende kleuren (zoals een PowerPoint-dia). Het kiezen van het juiste algoritme is je eerste prestatieboost.

Veelvoorkomende afbeeldingsformaten

Onlangs werden nieuwe afbeeldingsformaten geïntroduceerd door Google (webP) en Apple (HEIF), die een nog betere compressie bieden in vergelijking met JPG, GIF en PNG. Maar deze formaten moeten nog breed worden toegepast.

Het juiste afbeeldingsformaat kiezen

Welk formaat het beste is voor je afbeelding, hangt af van de daadwerkelijke inhoud van je afbeelding. Er is geen universele regel die het beste formaat voor een bepaalde afbeelding bepaalt. Je kunt het beste zelf proberen, kijken wat er met de bestandsgrootte gebeurt als je je afbeelding in verschillende formaten opslaat. Veel desktopprogramma's bieden de mogelijkheid om een formaat te kiezen wanneer je "Opslaan als" selecteert.

Je kunt beginnen met JPG voor foto's en PNG voor afbeeldingen met minder kleuren, zoals een logo, afbeelding of PowerPoint-dia. Formaten zoals JPG bieden verschillende instellingen voor compressiekwaliteit die van invloed zijn op de beeldkwaliteit en de bestandsgrootte. Een lagere kwaliteitsinstelling zal de beeldkwaliteit verminderen ten gunste van een kleiner bestand, je moet proberen een goede balans te vinden tussen kwaliteit en grootte.

Lossy en Lossless compressie

Compressie-algoritmen die kwaliteit inruilen voor bestandsgrootte worden lossy compressie-algoritmen genoemd. Als alternatief worden algoritmen die de oorspronkelijke beeldkwaliteit behouden, lossless compressie-algoritmen genoemd.

Hoe afbeeldingen te optimaliseren

Zodra je je JPG- of PNG-afbeelding hebt, kun je deze optimaliseren door de juiste instellingen voor het compressie-algoritme te selecteren. Maak je geen zorgen, je hoeft dit niet handmatig te doen: je kunt geautomatiseerde optimalisatiesoftware gebruiken om de optimale compressie-instellingen voor een bepaalde afbeelding te vinden.

JPG-afbeeldingen optimaliseren

Als je Photoshop gebruikt, kun je de ingebouwde functie Opslaan voor web gebruiken om een redelijk geoptimaliseerde JPG-afbeelding te krijgen.

Als alternatief kun je een commandoregelprogramma zoals jpegoptim gebruiken. Deze tool verkleint JPG-bestanden door de interne Huffman-tabellen te optimaliseren - waardoor de prestaties van het compressie-algoritme effectief worden verbeterd. Gemiddeld kun je een verbetering van 10-15% verwachten zonder verlies van beeldkwaliteit.

Een andere manier om JPG-afbeeldingen te optimaliseren is door een online optimizer te gebruiken, zoals TinyJPG of ImageOptim.

Als je WordPress gebruikt, kun je overwegen een plugin te gebruiken om afbeeldingsoptimalisatie voor je te doen, zoals Imagify van xtremerain.

PNG-afbeeldingen optimaliseren

PNG-bestanden kunnen worden geoptimaliseerd met Photoshop met behulp van de functie Opslaan voor web. Om je PNG-bestanden nog beter te optimaliseren, kun je een gespecialiseerde app gebruiken, zoals ImageAlpha voor Mac of PNGGauntlet voor Windows.

Er zijn online optimizers beschikbaar voor PNG-bestanden, zoals TinyPNG en Compressor.io.

Als alternatief kun je commandoregelprogramma's zoals optipng, pngcrush of pngquant gebruiken. Het is de moeite waard om deze PNG-tools wat dieper te bekijken.

Optipng vs pngcrush vs pngquant testen

Voor mijn werk als webontwikkelaar integreer ik afbeeldingsoptimalisatie in contentmanagementsystemen, waardoor het voor mijn klanten gemakkelijker wordt om hun afbeeldingen automatisch te optimaliseren. Naarmate het aantal klanten aanzienlijk is gegroeid, liep ik tegen prestatieproblemen aan.

Om meer prestaties te vinden, besloot ik optipng, pngcrush en pngquant te testen. Ik hoopte een goede afbeeldingsoptimalisatie te vinden met minder verwerkingskracht van de server. Dit zou de prestaties voor mijn klanten verbeteren.

PACE-CME

Een dergelijke klant is PACE-CME, een website met bronnen voor cardiovasculaire educatie voor artsen. Deze website bevat duizenden PowerPoint-dia's opgeslagen als PNG-bestanden.

Typische slide op pace-cme.org
Typische slide op pace-cme.org

Om de prestaties te testen, gebruikte ik een speciale testafbeelding die groter en zwaarder is dan een typische PowerPoint-dia. Deze testafbeelding is een afbeelding met hoge resolutie met gemengde inhoud, bestaande uit gedeeltelijk foto's, tekst en effen kleuren.

Test afbeelding, met effen kleuren, fotografische en tekstuele inhoud
Test afbeelding, met effen kleuren, fotografische en tekstuele inhoud

Methode

Ik heb tests uitgevoerd op een Quad-core Intel XEON-server met 8 GB RAM. Per PNG-optimalisatietool heb ik zowel de meest extreme instellingen gebruikt (om te zien wat het met de bestandsgrootte kon doen) als de standaardinstelling (om te zien hoeveel sneller de standaardinstellingen zijn en hoe hun output zich verhoudt tot de beste compressie-instellingen).

Resultaten

De prestaties van pngquant zijn verbluffend, het is veel sneller en levert tegelijkertijd een veel kleinere bestandsgrootte. Dit is echter geen magie, aangezien het een ander, lossy compressie-algoritme gebruikt. Dit betekent dat afbeeldingen die via pngquant zijn geoptimaliseerd, een beetje beeldkwaliteit verliezen. Ik heb ze van dichtbij vergeleken en kon het verschil niet zien.

Kwaliteit inspecteren: links origineel, rechts pngquant
Kwaliteit inspecteren: links origineel, rechts pngquant

Conclusie

Het optimaliseren van afbeeldingen voor web en prestaties is erg belangrijk. Zoals mijn tests hebben aangetoond, kan het kiezen van het juiste algoritme het verschil maken.

Voor mij betekende dit het kiezen van pngquant, maar jouw beslissing kan anders zijn, afhankelijk van het type afbeeldingen dat je wilt optimaliseren.

De belangrijkste les van deze blogpost is om aandacht te besteden aan afbeeldingen. Je website zal veel sneller zijn - en wie houdt er niet van een snelle website?