Afbeeldingen optimaliseren in Magento bespaart veel webruimte

Bespaar veel webruimte en optimaliseer de afbeeldingen in je Magento website. Deze blogpost is geschreven voor de servers van Byte, maar kan ook gebruikt worden voor het optimaliseren van afbeeldingen bij andere Magento hosting providers. Deze gastblog is geschreven door Magento developer Peter Jaap Blaakmeer (elgentos.nl). We vinden het super dat hij deze kennis met ons en andere Magento beheerders wil delen. Met deze blogpost kunnen onze klanten met Magento veel webruimte besparen.

Afbeeldingen optimaliseren

De afbeeldingen gebruikt in Magento kunnen in sommige installaties veel schijfruimte innemen. Dit komt omdat Magento de originele afbeeldingen, die in de backend worden geupload, opslaat en ze resized als ze op de frontend worden opgevraagd. Deze geresizede versies worden dan gecached en getoond aan de bezoeker, waardoor er minder dataverkeer gebruikt wordt.

Echter, het originele bestand blijft wel op de server staan. Vooral bij geautomatiseerde imports vanuit datafeeds van fabrikanten worden vaak hele hoge kwaliteit foto’s aangeleverd, vaak wel van rond de 5 MB per stuk. Als je dan een product catalogus van 5000 producten hebt, dan zit je al tegen de 25 gigabyte aan data voor de originele foto’s. Daar komt dus nog de bestandsgrootte van de kleinere versies in cache overheen.

Wij hebben daarom een script geschreven, die je op de shell omgeving kan draaien. Dit script loopt door de originele product foto’s heen en zoekt naar foto’s die breder zijn dan 1000 pixels. Deze worden dan geresized naar maximaal 1000 pixels (met behoud van ratio) en de kwaliteit van de foto wordt op 80% gezet. Beide parameters zijn in het script aan te passen. Een testrun op een media map van een klant van ons reduceerde de grootte van de map media/catalog/product van 13 gigabyte naar 2,5 gigabyte.

Voor het gebruik van dit script is de ImageMagick library benodigd. Deze staat standaard geïnstalleerd op de servers van Byte. De parameters zijn bovenaan het script aan te passen (NEWQUALITY & NEWSIZE).

Dubbele afbeeldingen verwijderen

Naast het verkleinen van de foto’s hebben we nog een script die de Magento omgeving opruimt qua afbeeldingen. Zo komt het vooral bij geautomatiseerde product imports vaak voor dat een configureerbaar product en alle bijbehorende simpele producten dezelfde foto gebruiken. Deze foto wordt dan n+1 keer aangemaakt op de schijf, hoewel dit eigenlijk dezelfde foto is. We hebben hiervoor een script geschreven die de dubbele foto’s opzoekt, verwijdert en een database aanpassing maakt zodat wordt verwezen naar het originele bestand. Voor dit script is de fdupes package benodigd. Deze staat standaard geïnstalleerd op de servers van Byte.

Database opschonen

Ook bevat dit script functies (cleanUpTableRowsMediaGallery & cleanUpTableRowsVarchar) om de database op te schonen. Soms wordt er nog verwezen naar een bestand dat niet meer bestaat. Dit script verwijdert die referenties zodat Magento een ‘Afbeelding niet gevonden’ afbeelding weergeeft.

De functie cleanUpOrphans zoekt alle productafbeeldingen die op de schijf staan waar niet naar wordt verwezen binnen de Magento installatie. Deze verweesde bestanden zullen worden opgeschoond.

Maak back-ups!

Zoals altijd, test dit eerst op een testomgeving (nooit op productie) en maak een back-up van zowel je database als je media map voordat je met deze scripts aan de slag gaat. Het wordt ten zeerste aangeraden om beide scripts vanaf de shell te draaien.

Ook een gastblog schrijven voor Byte?

In bovenstaande blogpost schrijft Peter Jaap Blaakmeer (elgentos.nl) dat ze voor een klant de grootte van de map media/catalog/product van 13 gigabyte reduceerde naar 2,5 gigabyte. Dat is een flinke optimalisatie… laat in de comments hieronder achter hoe groot jouw optimalisatie was.

We vinden het erg leuk om interessante en informatieve blogposts van onze partners te ontvangen. Als je ook graag je kennis deelt in de vorm van een (niet commerciële) gastblog, laat het ons dan graag weten via support@byte.nl.