L'utilisation de ZSTD_CCtxParams_setParameter(cctxParams, ZSTD_c_targetCBlockSize, ZSTD_TARGETCBLOCKSIZE_MAX)
conduit à une compression improbablement mauvaise pour les sources avec de grandes séquences minimales (> 1 Ko).
Utilisation d'une concaténation répétée d'un CSS minifié:
Avec la définition de targetCBlockSize == ZSTD_TARGETBLOCKSIZE_MAX:
bootstrap.min.css : 97.31% (13862462 => 13488900 bytes, bootstrap.min.css.zst)
Sans définir targetCBlockSize:
bootstrap.min.css : 0.15% (13862462 => 20476 bytes, bootstrap.min.css.zst)
Remarque supplémentaire: j'ai rencontré cela en essayant de réduire la taille du bloc lors de la décompression concernant # 2093. Si au lieu de définir TargetCompressedBlockSize, ZSTD_BLOCKSIZEMAX lui-même est réduit, ce qui entraîne également une réduction de la taille de bloc maximale, cela a un impact beaucoup plus faible sur la compression.
La source utilisée a été obtenue via la séquence suivante:
rm bootstrap.min.css; wget https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css && for i in {1..5}; do cat bootstrap.min.css >> bootstrap_2.min.css; cat bootstrap_2.min.css >> bootstrap.min.css; done && rm bootstrap_2.min.css
Je vais poser une question ici concernant l'architecture: targetCBlockSize fait-il supposer au compresseur qu'il va être introduit dans un décompresseur qui n'aura aucune connaissance en dehors du bloc qu'il reçoit? c'est-à-dire qu'il s'agit d'un décompresseur de streaming entièrement sans tampon?
targetCBlockSize
est "destiné" à être utilisé dans des scénarios de streaming où vous souhaitez réduire le temps de décompression du premier octet. Donc, si la taille de votre paquet est de 4 Ko, vous pouvez définir la taille de votre bloc cible sur 4 Ko et tenter de rendre chaque paquet décompressible, au lieu d'avoir à attendre 128 Ko avant de décompresser le premier octet.
Je ne suis pas sûr de ce qui se passe dans ce scénario, mais avec l'entrée, il devrait être facile à reproduire et à corriger. Je l'examinerai bientôt. Merci encore pour le rapport et les instructions de repro détaillées!
@dciliske J'ai reproduit le problème au niveau 22. Il n'est pas présent dans zstd-1.4.4, donc il n'en a jamais fait une version. Il semble que je l'ai présenté dans https://github.com/facebook/zstd/pull/1947. Je vais le réparer bientôt.
Commentaire le plus utile
@dciliske J'ai reproduit le problème au niveau 22. Il n'est pas présent dans zstd-1.4.4, donc il n'en a jamais fait une version. Il semble que je l'ai présenté dans https://github.com/facebook/zstd/pull/1947. Je vais le réparer bientôt.