Vous avez un site Web et vous souhaitez accélérer le temps de chargement des pages de votre site ?

Voici une astuce assez simple Ă  mettre en place qui vous permettra d'utiliser pleinement le codec Webp afin d'augmenter la compression des images de votre site et leur permettre de se charger plus rapidement.

webp

đŸ–Œïž Pourquoi utiliser Webp pour compresser ses images ?

Le Webp est un codec de compression développé par Google qui a plus de dix ans aujourd'hui. Il permet de compresser les images destinées au Web tout en permettant de garder une bonne qualité d'image. Sa spécificité est qu'il est capable de compresser tout type d'images que ce soit du JPEG, PNG ou du GIF avec un gain se mesurant de 30 à 80% en fonction du type d'image.

La bonne nouvelle est que seul IE11 ne supporte pas le Webp à l'heure actuelle sur le Web, il ne le supportera jamais puisque sa date de fin de support est annoncée pour cet été. Vous pouvez donc largement utiliser le Webp sur vos sites pour compresser vos images.

can-i-use-webp

đŸ—œïž Comment compresser les images de son site en Webp ?

La compression des images existantes de votre site Internet peut se faire au travers de l'outil Opensource "cwepb".

Pour vous simplifier la vie dans les arguments de l'outil, je vous recommande le script bash "img-optimize" disponible sous Github qui fait parfaitement le travail aprÚs l'avoir installé.

optimize.sh --webp --path ./images

Vos images au format Webp porteront le mĂȘme nom que l'image d'origine, mais avec l'extension ".webp".

Ainsi une image "blog.png" se fera compressée en Webp avec le nom "blog.png.webp".
Les images d'origines ne seront pas altérées par ce script.

Comment forcer Nginx à délivrer des images en Webp ?

Il est possible d'indiquer à Nginx de délivrer des images au format Webp seulement si le navigateur le supporte.

La premiĂšre Ă©tape consiste donc Ă  vĂ©rifier si le navigateur qui visite votre site supporte le Webp, cela peut se faire en vĂ©rifiant le contenu l'entĂȘte HTTP "HTTP Accept" du navigateur Web et de positionner une variable $webp_suffix avec la valeur ".webp" seulement si la prĂ©sence du mot clef "webp" est vĂ©rifiĂ©e.

Pour ce faire, un bloc de type "map" est à intégrer dans le bloc "http" de votre fichier de configuration Nginx pour permettre la vérification du support du codec Webp par le navigateur distant.

map $http_accept $webp_suffix {
        default "";
        "~*webp" ".webp";
}

Une fois cette action réalisée, il faut maintenant indiquer au serveur Web de fournir en priorité un fichier de type Webp si celui-ci est présent avant de fournir le fichier original demandé par le navigateur.

Cet ordre de fourniture peut ĂȘtre opĂ©rĂ© facilement au travers de l'instruction "try_files" :

try_files $uri$webp_suffix $uri =404

Le serveur Web fournira en priorité le fichier Webp si le navigateur distant supporte le codec et si le fichier existe sur le serveur avant de fournir le fichier original. Il finira par retourner une erreur 404 si jamais l'image n'est pas trouvée.

Enfin, une dernier entĂȘte HTTP peut ĂȘtre utile sur votre site Web pour indiquer que le contenu dĂ©livrĂ© par le serveur Web peut dĂ©pendre de l'encoding supportĂ© par le navigateur :

add_header Vary "Accept-Encoding";

Voici au final à quoi pourrait ressembler la configuration Nginx pour la "location" correspondant au répertoire des images de votre site :

location ^~ /content/images/ {
    root /var/www/www.monsite.org/;
    expires max;
    add_header Vary "Accept-Encoding";
    add_header "Access-Control-Allow-Origin" "*";
    add_header Cache-Control "public, no-transform";
    access_log off;
    log_not_found off;
    etag on;
    try_files $uri$webp_suffix $uri =404;
}

Si vous ĂȘtre perdu dans mes explications, voici un Gist de configuration Nginx minimale reprenant les Ă©lĂ©ments partagĂ©s au sein de cet article.

AprÚs cette modification réalisée sur la configuration du fichier vhost de votre site et votre serveur Nginx redémarré, votre serveur Web devrait délivrer des fichiers au format Webp en priorité.

Vous pouvez le vérifier en analysant le type d'images qui sont téléchargées par votre navigateur. L'extension Webp devrait apparaitre depuis l'extension développeur de votre navigateur préféré.

webp-chrome-developper

J'espÚre que ce petit tutoriel vous permettra d'optimiser les performances de votre site Web. N'hésitez pas à jeter un coup d'oeil sur mon tutoriel qui explique comment activer facilement le plugin Brotli sur votre serveur Nginx afin d'augmenter le niveau de compressions des fichiers JS et CSS de votre site Web.

Si vous souhaitez discuter tuning Nginx, n'hésitez pas à rejoindre le serveur Discord de la communauté Geeek ouvert à tous et à toutes.