Make ZIP files smaller with ZIP Shrinker2 months agohttps://evanhahn.com/make-zip-files-smaller-with-zip-shrinker/ZIP Shrinker 是一款浏览器工具,通过使用 libdeflate 以更高压缩比重新压缩文件、移除元数据以及删除目录条目来减小 ZIP 文件大小。它利用 WebAssembly 高效运行 libdeflate,以更多计算时间为代价,实现了比典型 Deflate 更好的压缩效果。移除未使用的元数据和目录条目(例如空目录)可节省额外字节,并且该工具与标准 ZIP 解压工具向后兼容。测试显示,在 Linux 源码上节省了 5.62%,在 EPUB 文件上节省了 18.16%,在 JAR 文件上节省了 2.86%,展示了在带宽和存储成本方面的实际收益。
Pattern Matching on Compressed Strings Without Decompression2 months agohttps://spiraldb.com/blog/pattern-matching-strings-without-decompressionVortex在FSST压缩字符串上引入无需解压的模式匹配功能。FSST是Vortex用于分析的轻量级字符串编解码器,支持单个值的独立解码。通过确定性有限自动机(DFA)在压缩编码上评估SQL LIKE谓词。Teddy预过滤器利用SIMD操作标记潜在匹配位置,减少了DFA的运行次数。在ClickBench Q20查询中,模式匹配下推实现了高达3.6倍的加速。随着线程数增加,解压计算成本降低,性能提升效果随之减弱。
Optimizing Lua string literals to save 400 bytes2 months agohttps://purplesyringa.moe/blog/guest/optimizing-lua-string-literals-to-save-400-...作者在ComputerCraft: Tweaked中面临磁盘空间限制,其中用Lua编写的程序超过了125KB的软盘上限,而其存储库的代码量超过了440KB。他们使用压缩技术来创建自解压存档以便于安装,将数据与解压器合并成单个文件。将Lua数据序列化为字面量具有挑战性,尤其是对于表和字符串的处理,涉及多种表示上的细微差别。字符串序列化需要处理带转义的引号字符串以及用括号分隔的原始字符串——后者忽略反斜杠但需管理换行序列和转义字符。为了处理包含所有字节序列(包括回车符)的原始字符串,他们采用了一种替换技术,通过'gsub'函数结合转义字符和位编码来最小化大小开销。
Compression in the game Full Quiet3 months agohttps://pineight.com/retrotainment/fq-compression.htmlRetrotainment Games 的《Full Quiet》采用多层压缩技术,将一个大型开放世界塞进仅半兆字节的 NES 卡带。文本压缩通过 DTE(双字母树编码)实现,该技术用单字节引用替换常见的双字符序列,使文本数据量减少 38%。色彩数据被大幅压缩:将 24 位色缩减至 6 位,使用调色板并结合子调色板,使得三个时段的总存储量从 696 MB 降至约 19 MB。图形被组织为 8x8 像素的图块,通过跨地图集共享图块,并采用游程编码(PB8)使独特图块数据量进一步减少 30.4%。元图块(将多个图块组合成更大的块)和分层压缩显著减少了地图数据,实现每像素 0.0278 位的压缩率,使游戏世界仅占用 ROM 容量的 51.4%。