﻿﻿{"id":2913,"date":"2026-05-04T13:56:18","date_gmt":"2026-05-04T11:56:18","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/zxc-une-bibliotheque-de-compression-2x-plus-rapide-que-lz4\/"},"modified":"2026-05-04T13:56:18","modified_gmt":"2026-05-04T11:56:18","slug":"zxc-une-bibliotheque-de-compression-2x-plus-rapide-que-lz4","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/zxc-une-bibliotheque-de-compression-2x-plus-rapide-que-lz4\/","title":{"rendered":"Zxc, une biblioth\u00e8que de compression 2\u00d7 plus rapide que LZ4"},"content":{"rendered":"<p>Deux fois plus rapide que LZ4 en d\u00e9compression ?? Ah bon c&#8217;est possible ? \u00c9videmment, quand Bertrand Lebonnois a publi\u00e9<br \/>\n<a href=\"https:\/\/github.com\/hellobertrand\/zxc\">zxc sur GitHub<\/a><br \/>\n, et m&#8217;a envoy\u00e9 un email pour me pr\u00e9venir, j&#8217;ai \u00e9t\u00e9 jeter un \u0153il, surtout aux benchmarks.<\/p>\n<p>Eh bien apr\u00e8s analyse, c&#8217;est bien r\u00e9el !<\/p>\n<p>La philosophie de zxc est assez tranch\u00e9e vous allez voir. Il s&#8217;agit d&#8217;une lib <strong>WORM<\/strong> (Write-Once, Read-Many) qui permet de compresser une fois lentement, \u00e0 la compilation ou en CI, et ensuite de d\u00e9compresser comme vous voulez des millions de fois sur les appareils de vos utilisateurs \u00e0 la vitesse de l&#8217;\u00e9clair. Avec zxc, on accepte que la compression soit lente et complexe (pour trouver le bitstream parfait), afin que la d\u00e9compression soit m\u00e9ga rapide et simple pour le processeur. C&#8217;est aussi simple que \u00e7a.<\/p>\n<p>Le revers de la m\u00e9daille, c&#8217;est que si vous voulez de la compression \u00e0 la vol\u00e9e ou du streaming temps r\u00e9el, ce n&#8217;est clairement pas adapt\u00e9. Par contre, si vous produisez des assets une fois et qu&#8217;ensuite, vous les servez des milliers de fois, alors vous \u00eates exactement dans la cible.<\/p>\n<p>En pratique, sur macOS M2 avec un corpus de test standard, zxc d\u00e9passe les ~12 000 Mo\/s en d\u00e9compression, contre ~5 600 Mo\/s pour <code>LZ4 --fast<\/code> dans le m\u00eame test. L&#8217;\u00e9cart reste \u00e9galement hyper solide ailleurs : 1,8\u00d7 sur ARM serveur (Google Axion) et 2\u00d7 sur x86_64 (AMD).<\/p>\n<p>\n<img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/zxc-bibliotheque-compression-2x-rapide-lz4\/zxc-bibliotheque-compression-2x-rapide-lz4-2.png\" alt=\"\" loading=\"lazy\">\n<\/p>\n<p>Et l&#8217;API propos\u00e9e par zxc ne s&#8217;arr\u00eate pas \u00e0 un compresseur basique. En effet, un mode &#8220;seekable&#8221; permet d&#8217;acc\u00e9der \u00e0 n&#8217;importe quelle position d&#8217;une archive sans scanner le fichier depuis le d\u00e9but. Par exemple, vous packagez vos<br \/>\n<a href=\"https:\/\/korben.info\/compactgui-compression-accelere-jeux-windows.html\">assets de jeux vid\u00e9o<\/a><br \/>\ndans une seule archive zxc, et quand le joueur charge une texture pr\u00e9cise, vous lisez directement le bon bloc, et pas tout le fichier.<\/p>\n<p>C\u00f4t\u00e9 installation, c&#8217;est simple : <code>brew install zxc<\/code> sur macOS, <code>apt install zxc<\/code> sous Debian ou Ubuntu, <code>pip install zxc-compress<\/code>, <code>npm install zxc<\/code>, <code>cargo add zxc-compress<\/code> ou <code>vcpkg install zxc<\/code> sous Windows.<\/p>\n<p>Des bindings officiels existent aussi pour Rust, Python, Node.js, Go et WASM et la communaut\u00e9 a aussi ajout\u00e9 Nim et Free Pascal de son c\u00f4t\u00e9. Et comme c&#8217;est cod\u00e9 en C, y&#8217;a aucune d\u00e9pendance lourde.<\/p>\n<p>Sache que pour assoir la cr\u00e9dibilit\u00e9 du projet, zxc a \u00e9t\u00e9 int\u00e9gr\u00e9 dans lzbench et TurboBench, les deux outils de r\u00e9f\u00e9rence permettant de comparer les algos de compression. Et le paquet est d\u00e9j\u00e0 dispo dans les versions testing et unstable de Debian, ce qui veut dire que les mainteneurs ont valid\u00e9 le truc !<\/p>\n<p>Bref, si vous g\u00e9rez de la compression d&#8217;assets ou de firmwares dans votre pipeline, \u00e7a vaut le coup d&#8217;y jeter un oeil.<\/p>\n<p>Merci \u00e0 Bertrand pour l&#8217;info et chapeau pour le boulot !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deux fois plus rapide que LZ4 en d\u00e9compression ?? Ah bon c&#8217;est possible ? \u00c9videmment, quand Bertrand Lebonnois a publi\u00e9 zxc sur GitHub , et m&#8217;a envoy\u00e9 un email pour me pr\u00e9venir, j&#8217;ai \u00e9t\u00e9 jeter un \u0153il, surtout aux benchmarks. Eh bien apr\u00e8s analyse, c&#8217;est bien r\u00e9el ! La philosophie de zxc est assez tranch\u00e9e vous allez voir. Il s&#8217;agit d&#8217;une lib WORM (Write-Once, Read-Many) qui permet de compresser une fois lentement, \u00e0 la compilation ou en CI, et ensuite de d\u00e9compresser comme vous voulez des millions de fois sur les appareils de vos utilisateurs \u00e0 la vitesse de l&#8217;\u00e9clair. Avec zxc, on accepte que la compression soit lente et complexe (pour trouver le bitstream parfait), afin que la d\u00e9compression soit m\u00e9ga rapide et simple pour le processeur. C&#8217;est aussi simple que \u00e7a. Le revers de la m\u00e9daille, c&#8217;est que si vous voulez de la compression \u00e0 la vol\u00e9e ou du streaming temps r\u00e9el, ce n&#8217;est clairement pas adapt\u00e9. Par contre, si vous produisez des assets une fois et qu&#8217;ensuite, vous les servez des milliers de fois, alors vous \u00eates exactement dans la cible. En pratique, sur macOS M2 avec un corpus de test standard, zxc d\u00e9passe les ~12 000 Mo\/s en d\u00e9compression, contre ~5 600 Mo\/s pour LZ4 &#8211;fast dans le m\u00eame test. L&#8217;\u00e9cart reste \u00e9galement hyper solide ailleurs : 1,8\u00d7 sur ARM serveur (Google Axion) et 2\u00d7 sur x86_64 (AMD). Et l&#8217;API propos\u00e9e par zxc ne s&#8217;arr\u00eate pas \u00e0 un compresseur basique. En effet, un mode &#8220;seekable&#8221; permet d&#8217;acc\u00e9der \u00e0 n&#8217;importe quelle position d&#8217;une archive sans scanner le fichier depuis le d\u00e9but. Par exemple, vous packagez vos assets de jeux vid\u00e9o dans une seule archive zxc, et quand le joueur charge une texture pr\u00e9cise, vous lisez directement le bon bloc, et pas tout le fichier. C\u00f4t\u00e9 installation, c&#8217;est simple : brew install zxc sur macOS, apt install zxc sous Debian ou Ubuntu, pip install zxc-compress, npm install zxc, cargo add zxc-compress ou vcpkg install zxc sous Windows. Des bindings officiels existent aussi pour Rust, Python, Node.js, Go et WASM et la communaut\u00e9 a aussi ajout\u00e9 Nim et Free Pascal de son c\u00f4t\u00e9. Et comme c&#8217;est cod\u00e9 en C, y&#8217;a aucune d\u00e9pendance lourde. Sache que pour assoir la cr\u00e9dibilit\u00e9 du projet, zxc a \u00e9t\u00e9 int\u00e9gr\u00e9 dans lzbench et TurboBench, les deux outils de r\u00e9f\u00e9rence permettant de comparer les algos de compression. Et le paquet est d\u00e9j\u00e0 dispo dans les versions testing et unstable de Debian, ce qui veut dire que les mainteneurs ont valid\u00e9 le truc ! Bref, si vous g\u00e9rez de la compression d&#8217;assets ou de firmwares dans votre pipeline, \u00e7a vaut le coup d&#8217;y jeter un oeil. Merci \u00e0 Bertrand pour l&#8217;info et chapeau pour le boulot !<\/p>\n","protected":false},"author":1,"featured_media":2914,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2913","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2913"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2913\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2914"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}