数据压缩是提高 Web 站点性能的一种重要手段。对有些文件来说,高达 70% 的压缩比率可以大大降低对带宽的需求。在实际应用时,web 开发者不需要亲手实现压缩机制,浏览器及服务器都已经将其实现了,不过他们需要确保在服务器段进行合理的配置。

数据压缩经常发生在三个层面:

  • 某些格式的文件采用特定的优化算法进行压缩。
  • 在 HTTP 层面资源以压缩的形式进行端到端传输。
  • 压缩还可能发生在 HTTP 连接的两个节点之间。

文件格式压缩

每一种文件类型都会存在冗余。如一个典型的文本文件存在 60% 的冗余,而音频或视频文件来说这个比例会更高。为了减少文件冗余所占用的空间,工程师们设计了针对指定文件格式的压缩算法。

压缩算法分类两类:

  • 无损压缩
  • 有损压缩

无损压缩在经历“压缩-解压缩”的过程并不会更改原始数据内容。gifpng 使用的是无损压缩。而有损压缩在经历“压缩-解压缩”的过程则会更改原始数据内容。Web 视频格式、jpeg 格式的图片都是有损压缩。一般情况下有损压缩比无损压缩更高效。

有些格式既可以应用无损压缩又可以应用有损压缩,如 webp,压缩算法通常可以通过压缩比例来进行配置。

对于图片来说,工具生成的图片其优化程度并不足以应用在 Web 的场景,这时候可以使用一些针对压缩场景的工具来对图片进行优化。

端到端压缩

端到端压缩是 Web 站点提升性能最大的地方。端到端压缩指的是