Qu‘est-ce que gzip ? L’outil phare de compression

L’outil de compression de données, gzip, a été développé par les programmateurs Jean-Loup Gailly et Mark Adler : ils avaient, à partir de 1991, pour but de réaliser une puissante alternative au programme Compress d’Unix et ainsi de le remplacer. Sa fonction et son comportement sont définis par les normes Posix, qui fournissent la compression des fichiers en utilisant l’algorithme adaptatif Lempel-Ziv. Cependant, cet algorithme et son extension de Terry Welch ont été protégés pendant de nombreuses années (Jusqu’en 2003) par des brevets américains, cela fut donc une forte motivation pour travailler à réaliser une alternative adéquate. De plus l’accent a été mis sur la qualité de la compression, avec succès puisque gzip est beaucoup plus efficace que l’outil d’Unix.

Comment fonctionne gzip ?

gzip qui est l’acronyme de « GNU zip » est basé sur l’algorithme librement utilisable Deflate, qui est une combinaison de la méthode de compression de données LZ77 (Lempel-Ziv 77) ainsi que du codage Huffman. En utilisant ces techniques, gzip scanne les données pour dupliquer les chaînes de données (chaînes de caractères). Si le programme rencontre de telles séquences récurrentes, il les remplace par une référence de la première chaîne, ce qui limite ainsi habituellement la longueur à 32 000 octets. Par conséquent, si une séquence de caractères n’apparait pas dans les 32000 octets, elle est sauvegardée sans compression dans le fichier gzip sous l‘extension .gz. La procédure est toutefois restreinte à un fichier individuel, c’est pourquoi on utilise le programme d’archivage tar (de l’anglais tape archiver), pour créer des archives (Tarball) avec les terminaisons .tar.gz ou .tgz.

Conseil

par défaut, le fichier de source est effacé après la compression gzip. Toutefois, vous pouvez désactiver cette fonction automatique avec le paramètre optionnel (-k).

Pour décompresser des paquets compressés, vous pouvez soit compter sur l’application gunzip ou alors accéder à la commande gzip correspondante. Les propriétés et la structure du format gzip, qui permettent aux fichiers d’être convertis en fichiers compressés, sont décrits dans les RFC spécifiques 1951 publiés en mai 1996 et les RFC 1952. Par exemple, cela inclut un en-tête de 10 octets avec le numéro de version et l’horodatage, des en-têtes supplémentaires facultatifs, qui par exemple stockent le nom original du fichier source ainsi qu’un pied de page de 8 octet, qui contient notamment une somme de contrôle pour la détection des erreurs.

Quand l’outil de compression est utilisé ?

Gzip a initialement été développé pour la plateforme GNU sous unixoide, mais il est aujourd’hui utilisable pour de nombreuses plateformes, tant que la licence GLP est sélectionnée pour le projet. Par exemple, sur le système Linux, l’outil de compression est habituellement installé automatiquement ou alors inclus comme une installation alternative dans la gestion des paquets. En plus des diverses éditions pour les systèmes d’exploitations plus âgés, il existe aussi des versions pour MacOs et Windows sur le site du programme. En outre, des applications de serveurs Web comme Apache possèdent depuis des années le compresseur gzip, même si la fonction n’est pas toujours utilisée, de même que les navigateurs modernes qui ont la capacité d’extraire des fichiers compressés et de les décompresser pendant le rendu des pages Web.

Pour le développement Web, gzip est ainsi un incroyable atout : si la procédure est activée, le serveur Web initie donc automatiquement la compression de l’espace Web téléchargé et génère des éléments de sites dynamiques. De cette manière, le temps de chargement du site peut être considérablement réduit pour les visiteurs. En effet les visiteurs doivent seulement charger les paquets de données compressées, en conséquence, la construction des pages se réalise bien plus rapidement. La décompression est assurée en arrière-plan par le navigateur, sans aucune bande passante additionnelle. Les utilisateurs des appareils mobiles, en particulier, bénéficient également de ce gain de performance et cela influence aussi indirectement le classement des résultats des moteurs de recherche.

Gzip : Syntaxe et instructions

Il existe des interfaces graphiques pour les différentes plateformes, et l’utilisation de gzip via le terminal ou par exemple l’invite de commande est bien sûr également réalisable. Même pour les débutants, ce n’est pas bien compliqué de l’utiliser, en effet gzip est optimisé comme un outil classique en ligne de commande. L’exemple ci-dessous est illustré à partir de gzip et la syntaxe générale, qui est relativement simple est la suivante :

gzip option fichier(s)

L’indication d’«option » n’est pas obligatoire. Si le champ reste libre, gzip retournera aux paramètres par défaut. Par exemple la commande simple

gzip exemple.txt

est suffisante pour créer une version compressée du fichier texte exemple.txt. Toutefois afin de décompresser le fichier ultérieurement ou de donner des instructions spécifiques sur le niveau de compression, l’emplacement ou alors la manipulation du fichier original, il est nécessaire de rentrer les commandes spécifiques appropriées. Le tableau suivant résume les commandes gzip les plus importantes :

Option Description
-1 … -9 Pour définir le niveau de compression (1–9), la valeur 1 représente la compression la plus faible et la plus rapide, la valeur 9, elle représente à l’inverse le taux de compression le plus fort mais par conséquent la compression la plus lente. La valeur 5 est prédéfinie.
-r (recursive). Permet de parcourir la structure du répertoire récursivement, (y compris tous les sous-répertoires) et, par exemple, compresse ou décompresse tous les fichiers.
-f (force). Pour forcer la compression gzip et la décompression d’un fichier, si nécessaire en écrasant les fichiers existants avec le même nom de fichier.
-d (decompress). Pour décompresser le fichier et donc extraire le fichier sélectionné dans le répertoire.
-k Empêche la suppression du fichier source
-l (list). Pour afficher les informations du fichier comme par exemple le taux de compression d’un fichier compressé.
-c (stdout). Pour afficher les résultats de la compression sur la sortie standard sans modifier les fichiers originaux. Généralement l’écran est connecté à la ligne de commande.
-q (quiet). Pour supprimer tous les avertissements et les messages de gzip
-t (test). Pour tester l’ensemble des fichiers compressés.
-h (help). Pour obtenir l‘écran d’aide.

Comment utiliser la compression gzip pour votre projet Web Apache ?

Les serveurs Web fournissent aussi généralement une méthode de compression sous la forme d’un module qui doit être correctement activé. Aujourd’hui de nombreux fournisseurs d’hébergement Web offrent la fonction par défaut, ce qui n’était pas toujours le cas dans le passé. Le raison principale était que le processus de compression nécessitait des performances supplémentaires du processeur. Si vous n’êtes pas certains que votre hébergeur autorise gzip, vous pouvez soit le contacter directement ou alors initier une requête manuelle. Sur un serveur Web Apache, vous pouvez vérifier les paramètres du module en utilisant simplement la requête phpinfo(). L‘entrée HTTP_ACCEPT_ENCODING vous indique si une méthode de compression est sélectionnée et laquelle.

Activer la compression gzip dans le fichier .htaccess

Vous pouvez utiliser le fichier .htaccess pour effectuer des paramètres spécifiques au répertoire (Ceux-ci s’appliquent aux répertoires actuels et à tous les sous répertoires) et ainsi configurer votre serveur Web en temps réel. Ceci est possible car le fichier de configuration qui se trouve dans le répertoire racine est lu automatiquement à chaque demande qui atteint le serveur. Toutefois, avec certains fournisseurs d’hébergement Web, le fichier .htaccess est stocké dans un autre dossier, masqué ou verrouillé, même pour l’accès. Dans ce cas, vous devez alors contacter l’hébergeur et demander la libération du fichier. Si vous pouvez effectuer les configurations, activez alors la compression gzip (mod_gzip) ou le module de l’algorithme Deflate (mod_deflate), et enfin ajouter le code suivant au fichier .htaccess :

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
Conseil

pour les deux modules mod_gzip et mod_deflate, vous avez besoin de la libération par l‘intermédiaire de votre hébergeur Web.

Activer la compression gzip via PHP

Il est possible d’activer l’algorithme de compression à l’aide d’une simple entrée PHP. L’inconvénient est que le code doit être entré individuellement pour chaque document PHP. Cette option est utile uniquement si vous n’avez pas les autorisations nécessaires pour modifier le fichier .htaccess. La ligne de code que vous devez définir au début de chaque fichier est la suivante :

<?php
ob_start("ob_gzhandler");
?>

Implémenter gzip en utilisant des plugins de CMS

En plus des deux solutions manuelles recommandées, il existe aussi une autre variante qui ne requiert qu’un minimum de configuration : l’activation de la compression gzip via un plugin pour le système de gestion de contenu que vous utilisez. Ce sont des extensions que vous pouvez incorporer en quelques minutes et que vous pouvez ajuster selon vos souhaits, notamment pour le CMS WordPress qui est basé sur PHP. Ci-dessous la liste des trois plugins les plus populaires pour le système de gestion de contenu :

  • W3 Total Cache : Le plugin W3 Total Cache de WordPress promet l’amélioration au minimum dix fois supérieur de la performance globale du site. En plus de divers mécanismes de mise en cache et de soutien pour les appareils mobiles et le référencement en ligne, il permet aussi d’activer la compression gzip.
  • Check and Enable GZIP compression : Avec cette extension, qui a également été développée pour le CMS WordPress, vous pouvez vérifier si la compression gzip est déverrouillée pour votre projet. Pour cela, le plugin accède au service en ligne checkgzipcompression.com. Si la compression est désactivée, le plugin permet de lancer l’activation.
  • WP Performance Score Booster : Avec plus de 150.000 téléchargements et plus de 30.000 installations actives, l‘extension WP Performance Score Booster est très bien référencée. En utilisant ce plugin, vous pouvez ainsi facilement activer gzip et compresser efficacement le contenu de votre projet Web comme Texte, HTML, JavaScript, CSS, XML et Co.

Avec d’autres systèmes tels que Joomla!, vous n’êtes même pas dépendant de l’utilisation d’une extension. Les fonctions standards comportent en effet déjà la technologie de compression.

Pour activer gzip sur le serveur Web NGINX

Si vous chargez le contenu de votre site à l’aide d’un serveur Web NGINX, il est également possible d’utiliser la méthode gzip afin d‘améliorer le temps de chargement de votre projet. Pour cela il suffit simplement de configurer le module ngx_http_gzip_module. Par défaut la directive « gzip », qui vous permet d’activer le service de compression est désactivée. Pour modifier ce paramètre, ouvrez nginx.conf et y rechercher la directive « gzip ». Ensuite, il suffit simplement de remplacer l’entrée « gzipp off » par « gzipp on ». Le tableau suivant indique les significations et les possibilités d’autres directives pour configurer NGINX et la compression gzip.

Directive Syntaxe Réglage par défaut description
gzip_buffers gzip_buffers number size; gzip_buffers 32 4k; 16 8k Définit le nombre et la taille des tampons pour le processus de compression.
gzip_comp_level gzip_comp_level level; gzip_comp_level 1; Spécifie le niveau de compression ; valeurs possibles : 1-9.
gzip_min_length gzip_min_length lenght; gzip_min_length 20; Spécifie la longueur minimale d’un fichier compressé en octets.
gzip_http_version gzip_http_version version; gzip_http_version 1.1; Détermine la version HTTP pour répondre à une demande avec une réponse compressée.
gzip_types gzip_types mime-type; gzip_types text/html; Règle quel type de contenu la compression doit appliquer (également possible : CSS, JSON, XML, etc.).

Pour tester la compression

Si vous avez configuré la compression gzip pour votre projet Web, vous pouvez alors utiliser différents outils en ligne pour vérifier et tester le fonctionnement et savoir comment votre serveur Web gère les requêtes et délivre le contenu compressé. Pour effectuer cela, on vous recommande  l’application Google PageSpeed Insights. Après l’avoir appliqué sur n’importe quel page de votre site Web, l’outil analyse automatiquement le contenu, puis vous avertit des forces et des faiblesses au niveau de la performance de la page. De cette manière, vous obtiendrez des informations sur la compression, ainsi qu’une vérification pour savoir si la compression gzip est bien activée. Comme alternative, vous pouvez aussi facilement effectuer une autre vérification avec le test de compression HTTP : WhatsMyIP.org.

Conseil

Un seul test n’est pas toujours suffisant, nous vous conseillons de toujours effectuer le contrôle de plusieurs pages de votre projet Web.