压缩:提速提效

压缩:提速提效

业务场景

在数据量稍大些的场景中,传输时间往往占耗时的大头。压缩算法在数据存储、数据传输和用户体验等方面都具有重要的作用,可以提高效率、节省资源和改善用户体验。

案例

⓵ 压缩算法在 HTTP 协议中的应用

压缩应我们身边。

Content-Encoding 是 HTTP 协议中的一个头部字段,用于指示服务器对响应内容进行了何种类型的编码压缩。它的作用是告知客户端如何解码和还原服务器返回的压缩内容。

Content-Encoding 的作用包括:

  1. 压缩传输:通过使用 Content-Encoding 头部字段,服务器可以对响应内容进行压缩,减小数据的大小,从而减少传输的数据量和网络带宽消耗。这可以提高网络传输的效率,加快数据的传输速度。
  2. 节省带宽:通过压缩响应内容,Content-Encoding 可以减少数据的大小,从而节省网络带宽。这对于网络流量较大的网站和应用程序来说,可以降低服务器和网络的负载,提高整体性能和响应速度。
  3. 客户端解压缩:客户端在收到带有 Content-Encoding 头部字段的响应时,可以根据指定的压缩算法对内容进行解压缩。这样客户端就能够还原压缩前的原始内容,以便正确处理和显示。

常见的 Content-Encoding 值包括:Gzip、Deflate、Br 等算法。

对于 REST API 的开发者来说,资源表示压缩是一项非常重要的技术,可以帮助我们提高 API 的性能,减少响应大小,提升用户体验。

⓶ 压缩算法在构建部署项目的一次实践

先说结论:压缩平均节省了 90% 的时间。

本节将以 《速度与压缩比如何兼得?压缩算法在构建部署中的优化》为例,简要说明压缩算法在项目实践中的效果。

  • 文中用的是镜像的构建包数据;
  • 方案对比测试中选择了 1GB 左右的构建包进行压缩测试,既能覆盖 99% 的场景,也可以看出压缩算法之间比较明显的提升;

几种压缩算法对比:

文中测试了这几种算法结果(多次运行选择结果的中位数),数据对比如下表格:

Zstd 官方 Benchmark 数据对比

文中用 Zstd 对镜像的发布包做了测试,结论如下:

  • 我们采用 Zstd 默认的参数进行了测试,压缩时间 8.471 s 仅为原来的 11.266%,提升了 88.733%。
  • 解压时间 3.211 仅为原来的 29.83%,提升约为 70.169%。
  • 同时压缩率也从 2.548 提升到了 2.621。

优劣分析总结:

在测试案例对比中,时间耗时的顺序为 Pzstd < ISA-L < Pigz < LZ 4 < Zstd < Brotli < Gzip (排名越靠前越好),其中压缩和解压缩的时间在整体的耗时上占比较大,因此备选策略为 Pzstd、ISA-L、Pigz。

详细的测试过程和方案对比可以参考原文: 《速度与压缩比如何兼得?压缩算法在构建部署中的优化》

小结

谚云:没有最好,只有最适合

压缩算法的衡量指标包括:压缩比、压缩/解压速度、CPU/内存占用等。这些指标通常是相互关联的,不同的压缩算法在不同的数据类型和压缩设置下可能表现出不同的性能。选择合适的压缩算法应综合考虑这些指标,并根据具体的应用需求进行权衡。

0%