Utilizzare Imagemin per comprimere le immagini

Katie Hempenius
Katie Hempenius

Perché dovrebbe interessarti?

Le immagini non compresse appesantiscono le pagine con byte non necessari. Poiché le immagini possono essere candidate per Largest Contentful Paint (LCP), questi byte non necessari possono aumentare la durata del caricamento delle risorse dell'immagine, con conseguenti tempi LCP più lunghi.

La foto a destra è il 40% più piccola di quella a sinistra, ma probabilmente apparirebbe identica all'utente medio.

Immagine stock di un paesaggio urbano.

20 KB

Immagine di stock dello stesso paesaggio urbano, con alcuni artefatti e sfocature aggiuntivi.

12 KB

Misura

Esegui Lighthouse per verificare se ci sono opportunità per migliorare il caricamento della pagina comprimendo le immagini. Queste opportunità sono elencate in "Codifica efficiente delle immagini":

Report Lighthouse con la voce "Codifica in modo efficace le immagini" evidenziata.

Imagemin

Imagemin è una scelta eccellente per la compressione delle immagini perché supporta un'ampia varietà di formati di immagine e si integra facilmente con gli script e gli strumenti di build. Imagemin è disponibile sia come CLI sia come modulo npm. In genere, il modulo npm è la scelta migliore perché offre più opzioni di configurazione, ma la CLI può essere un'alternativa valida se vuoi provare Imagemin senza toccare il codice.

Plug-in

Imagemin è basato su "plug-in". Un plug-in è un pacchetto npm che comprime un particolare formato di immagine (ad es. "mozjpeg" comprime i JPEG). I formati di immagine più diffusi potrebbero avere più plug-in tra cui scegliere.

La cosa più importante da considerare quando scegli un plug-in è se è "lossy" o "lossless". Nella compressione lossless, nessun dato viene perso. La compressione lossy riduce le dimensioni del file, ma a scapito della possibile riduzione della qualità dell'immagine. Se un plug-in non indica se è "lossy" o "lossless", puoi capirlo dalla sua API: se puoi specificare la qualità dell'immagine dell'output, allora è "lossy".

Per la maggior parte delle persone, i plug-in lossy sono la scelta migliore. Offrono un risparmio di dimensioni dei file significativamente maggiore e puoi personalizzare i livelli di compressione in base alle tue esigenze. La tabella seguente elenca i plug-in Imagemin più diffusi. Questi non sono gli unici plug-in disponibili, ma sarebbero tutti ottimi per il tuo progetto.

CLI Imagemin

La CLI Imagemin funziona con 5 plug-in diversi: imagemin-gifsicle, imagemin-jpegtran, imagemin-optipng, imagemin-pngquant e imagemin-svgo. Imagemin utilizza il plug-in appropriato in base al formato dell'immagine di input.

Per comprimere le immagini nella directory "images/" e salvarle nella stessa directory, esegui il seguente comando (sovrascrive i file originali):

$ imagemin images/* --out-dir=images

Modulo npm Imagemin

Se vuoi utilizzare Imagemin con un bundler, verifica se il bundler scelto ha un plug-in disponibile. Ad esempio, webpack è un bundler diffuso che supporta molto bene Imagemin. Puoi scoprire di più su come utilizzare Imagemin con webpack in questo codelab.

Puoi anche utilizzare Imagemin da solo come script Node. Questo codice utilizza il plug-in "imagemin-mozjpeg" per comprimere i file JPEG a una qualità di 50 ("0" è la peggiore, "100" è la migliore):

const imagemin = require('imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');

(async() => {
  const files = await imagemin(
      ['source_dir/*.jpg', 'another_dir/*.jpg'],
      {
        destination: 'destination_dir',
        plugins: [imageminMozjpeg({quality: 50})]
      }
  );
  console.log(files);
})();