使用 gzip 时使用预先计算的数据

Bug*_*goK 3 compression gzip

我想预先计算一些结构(hash / dictionary / tree - depends on the terminology)gzip在压缩/解压缩数据时使用它。

动机是在以下场景中通过网络保存数据:

我有许多服务器发送给客户端的相对较小(几个 KB)的文本响应。这些响应具有非常相似的结构,但并不完全相同。我可以在客户端和服务器中放置静态结构(它们不必相同)。

目标是节省 CPU 时间,为不同的服务器响应计算我多次使用的计算机,但更重要的是 - 当我可以使用静态结构时,通过网络节省字节。

另一种选择是使用除 之外的不同压缩算法gzip,但我宁愿不这样做。

谢谢!

Mar*_*ler 5

“拯救过线字节”,你应该使用的zlibdeflateSetDictionary()inflateSetDictionary()操作。它们允许您提供多达 32K 的类似于正在压缩的数据,称为“字典”。解压端需要有完全相同的字典。字典没有什么特别之处。它可以简单地构建为多个 KB 响应的串联,以适应 32K。

这将使用 zlib 格式而不是 gzip 格式,因为 gzip 格式没有规定使用预设字典。

CPU时间不会有任何增加,实际上处理32K字典会花费更多的CPU时间。但是在您描述的情况下,它可以显着提高压缩率。您可以通过处理一次 32K 字典然后复制 deflate 状态以deflateCopy()供重用来减少 CPU 时间。