gzip (DEFLATE)
Voyez comment gzip réduit un texte : les répétitions deviennent de courtes copies et les codes de Huffman donnent moins de bits aux symboles fréquents.
- Fenêtre : 32 Ko
- Copies : 3-258 octets
- Codes : 15 bits max.
- Enveloppe gzip : 18 octets
Que veulent dire ces termes ?
- Littéral : un caractère écrit tel quel, car aucune répétition de 3 caractères ou plus ne commence à sa position.
- Copie : une longueur et une distance qui signifient « prends autant de caractères, à partir de tant de positions en arrière ». Elle peut chevaucher le texte qu'elle produit.
- Fenêtre : jusqu'où le compresseur peut remonter pour chercher une répétition. 32 Ko dans gzip, jusqu'à 16 Mo dans Brotli.
- Code de Huffman : un code binaire pour chaque symbole, plus court pour les symboles fréquents, construit à partir d'un arbre qui réunit encore et encore les deux symboles les plus rares.
- Code préfixe : aucun code n'est le début d'un autre, donc une suite de codes se relit sans séparateurs.
Le texte compte 23 caractères, soit 184 bits sans compression. Le compresseur le lit de gauche à droite et se demande à chaque position si ce qui suit est déjà apparu.
Espace : lecture ou pause. Flèches gauche et droite : pas à pas. Origine et Fin : sauter.
Essayez : Tapez la même lettre de nombreuses fois. Une seule copie de distance 1 les couvre toutes, car une copie peut chevaucher le texte qu'elle produit.
Comment ça marche
gzip applique DEFLATE en deux étapes. LZ77 parcourt le texte et cherche, à chaque position, la plus longue suite d'octets déjà apparue dans les 32 derniers Ko ; au lieu de la répéter, il écrit une paire : le nombre d'octets à copier (3-258) et la distance à laquelle ils se trouvent en arrière. Ce qui reste, les littéraux et ces paires, est ensuite écrit avec des codes de Huffman, où les symboles fréquents reçoivent des codes courts et les rares des codes longs. gzip enveloppe le résultat dans un en-tête de 10 octets et une fin de 8 octets avec une somme de contrôle CRC-32.
Quand le choisir
gzip compresse le texte qui se répète : HTML, CSS, JavaScript, JSON, journaux, CSV. Tous les navigateurs et serveurs le comprennent, il est rapide à tous les niveaux, et c'est le choix sûr par défaut pour compresser les réponses à la volée. Les données déjà compressées, comme JPEG, PNG, WOFF2 ou ZIP, n'ont plus de répétitions, donc gzip n'y ajoute que son enveloppe.
Sur votre propre texte
Les deux mêmes étapes, réalisées par le vrai gzip (niveau 6) sur un texte plus long. Collez le vôtre, ou apportez-en un depuis l'outil Compression gzip et Brotli.