Node.js zlib.brotliCompress() 方法

2025年2月14日 | 阅读 4 分钟

Node.js zlib.brotliCompress() 函数是基于 Brotli 算法的强大数据压缩工具。Brotli 是一种通用、无损的压缩方法,可以有效地减小数据大小,使其成为 Web 资源和其他需要此功能的应用程序的绝佳选择。

Node.js zlib 模块包含 zlib.brotliCompress(),它是几种压缩工具之一。与 Gzip 和 Deflate 等竞争算法相比,Google 的 Brotli 提供了最佳的压缩率,尤其适用于 HTML、CSS 和 JavaScript 文件等 Web 相关内容。

语法

它具有以下语法:

参数

输入: 可以是文本。它可以是 DataView、TypedArray 或 Buffer。

选项: 包含 Brotli 压缩选项的项目(可选)。

回调: 在压缩过程完成时触发的函数。两个参数很重要

  • err null,如果没有错误,则为错误对象。
  • result: 压缩数据的缓冲区。

Brotli 压缩原理

Google 开发了一种名为“Brotli”的无损压缩技术,该技术专门针对 Web 显示进行了优化。自 2015 年首次发布以来,其有效的压缩功能已被整合到各种 Web 技术中。

基本概念

LZ77 方法: Brotli 使用 LZ77 方法的变体,该方法用先前分配给未压缩数据的引用之一替换重建的数据。

霍夫曼编码: 数据使用霍夫曼编码进行编码,这是一种用于无损数据压缩的熵编码技术。霍夫曼编码为输入字符提供可变长度,并对常用字符应用快捷方式。

上下文建模: 为了提高压缩效率,Brotli 使用上下文建模技术来预测每个信号的可能性。

示例

让我们举一个例子来说明 Node.js zlib.brotliCompress() 函数。

输出

Node.js zlib.brotliCompress() Method

压缩过程

Brotli 压缩过程包含几个步骤:

  • 输入缓冲: 将输入数据读入缓冲区称为输入缓冲。
  • 滑动窗口: Brotli 使用滑动窗口来搜索数据中的重复字符串。此窗口的大小可以更改,这会影响内存使用和压缩效率。
  • 匹配查找: 算法在滑动窗口中搜索匹配项,并在找到时用短引用替换字符串。
  • 单词编码: 使用引用模型来确定任何不匹配数据或单词表示的可能性。
  • 熵编码: 使用霍夫曼编码,对实际编码器和匹配查找器的输出进行压缩,以获得最终的压缩输出。

解压缩过程

解压缩过程与压缩过程相反。

  • 霍夫曼解码: 使用霍夫曼编码表来解码压缩数据。
  • 解码字面量和匹配项: 使用解码的字面量和匹配项来重建原始数据。
  • 输出缓冲: 当数据被卸载时,它会被写入输出缓冲区。

比较此压缩算法

Gzip

  • 压缩率: 在 Web 资源方面,Brotli 通常比 Gzip 提供更高的压缩率。
  • 速度: Gzip 通常以比 Brotli 更低的压缩率压缩数据,但速度更快。
  • 兼容性: 广泛的平台和应用程序使用并支持 Gzip。

Deflate

  • 压缩率: 与 Gzip 一样,Deflate 通常产生的压缩率低于 Brotli。
  • 速度: Deflate 的压缩速度比 Brotli 快,但其压缩率效果较差。

Bzip2

  • 压缩率: Bzip2 通常比 Brotli 慢,但可以提供相当或略优的压缩率。
  • 速度: 在压缩和解压缩速度方面,Bzip2 比 Brotli 和 Gzip 都慢。