当前位置: 首页 > news >正文

Node.js zlib模块所有 API 详解 + 常用 API + 使用场景

一、zlib 模块简介

  • zlib 是 Node.js 内置的压缩模块,基于 zlib C 库实现。

  • 支持常见压缩算法:gzip、deflate、brotli

  • 常用于:HTTP 压缩传输文件压缩存储流式数据压缩

引入模块:

const zlib = require('zlib');

二、zlib 模块 API 分类详解


1. 压缩/解压缩(同步/异步方式)

异步 API(推荐,非阻塞 IO)

zlib.gzip(buffer[, options], callback)
zlib.gunzip(buffer[, options], callback)
zlib.deflate(buffer[, options], callback)
zlib.inflate(buffer[, options], callback)
zlib.deflateRaw(buffer[, options], callback)
zlib.inflateRaw(buffer[, options], callback)
zlib.brotliCompress(buffer[, options], callback)
zlib.brotliDecompress(buffer[, options], callback)

示例:

const input = 'Hello Node.js';zlib.gzip(input, (err, result) => {if (err) throw err;console.log('压缩后:', result.toString('base64'));zlib.gunzip(result, (err, output) => {if (err) throw err;console.log('解压后:', output.toString());});
});

同步 API(阻塞线程,少用)

zlib.gzipSync(buffer[, options])
zlib.gunzipSync(buffer[, options])
zlib.deflateSync(buffer[, options])
zlib.inflateSync(buffer[, options])
zlib.deflateRawSync(buffer[, options])
zlib.inflateRawSync(buffer[, options])
zlib.brotliCompressSync(buffer[, options])
zlib.brotliDecompressSync(buffer[, options])

2. 流式压缩/解压(大文件推荐)

可用于 管道,处理大文件(如 .tar.gz),不需要一次性加载到内存。

zlib.createGzip([options])
zlib.createGunzip([options])
zlib.createDeflate([options])
zlib.createInflate([options])
zlib.createDeflateRaw([options])
zlib.createInflateRaw([options])
zlib.createBrotliCompress([options])
zlib.createBrotliDecompress([options])

示例:

const fs = require('fs');
const zlib = require('zlib');// 文件压缩
fs.createReadStream('input.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));// 文件解压
fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('output.txt'));

3. 常见选项

  • level: 压缩等级(0-9,默认 zlib.constants.Z_DEFAULT_COMPRESSION

  • windowBits: 压缩算法的滑动窗口大小

  • memLevel: 内存使用量(1-9)

  • strategy: 压缩策略

  • flush: 刷新模式

  • finishFlush: 结束刷新模式

  • chunkSize: 默认 16KB

示例(高压缩比):

const options = { level: zlib.constants.Z_BEST_COMPRESSION };
zlib.gzip('hello', options, (err, res) => {console.log(res.toString('base64'));
});

4. 常量

zlib.constants 提供了许多压缩参数常量:

  • Z_NO_COMPRESSION (0)

  • Z_BEST_SPEED (1)

  • Z_BEST_COMPRESSION (9)

  • Z_DEFAULT_COMPRESSION (-1)

  • Z_BROTLI_PARAM_QUALITY (Brotli 压缩质量 0–11)

console.log(zlib.constants.Z_BEST_COMPRESSION); // 9

三、常用 API 总结

API功能常用场景
gzip / gunzipgzip 压缩 / 解压HTTP 响应压缩、日志文件压缩
deflate / inflatedeflate 压缩 / 解压老的 HTTP 压缩协议
brotliCompress / brotliDecompressBrotli 压缩 / 解压HTTP/2, HTTP/3 推荐算法
createGzip / createGunzip流式 gzip大文件压缩(如 .tar.gz
createBrotliCompress / createBrotliDecompress流式 BrotliWeb 内容压缩
zlib.constants压缩参数常量调整压缩率/速度平衡

四、使用场景总结

1. HTTP 响应压缩

const http = require('http');
const zlib = require('zlib');http.createServer((req, res) => {const raw = 'Hello World, this is compressed!';res.writeHead(200, { 'Content-Encoding': 'gzip' });zlib.gzip(raw, (err, buffer) => {res.end(buffer);});
}).listen(3000);

2. 日志文件压缩

const fs = require('fs');
const zlib = require('zlib');fs.createReadStream('server.log').pipe(zlib.createGzip()).pipe(fs.createWriteStream('server.log.gz'));

3. 大文件解压缩

fs.createReadStream('backup.tar.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('backup.tar'));

4. Brotli 在前端资源压缩(HTTP/2 常用)

const input = 'Some static file content';
zlib.brotliCompress(input, {params: {[zlib.constants.BROTLI_PARAM_QUALITY]: 11, // 最优压缩}
}, (err, result) => {console.log('Brotli 压缩结果:', result.toString('base64'));
});

5. 自定义压缩等级

zlib.gzip('test', { level: zlib.constants.Z_BEST_SPEED }, (err, res) => {console.log('快速压缩:', res.length);
});zlib.gzip('test', { level: zlib.constants.Z_BEST_COMPRESSION }, (err, res) => {console.log('高压缩比:', res.length);
});

五、注意事项

  1. 异步优先:避免使用同步 API,防止阻塞事件循环。

  2. 流式操作:处理大文件时,推荐 pipe 流式压缩,避免内存溢出。

  3. 算法选择

    • gzip → 兼容性最好

    • deflate → 较旧协议用

    • brotli → 新一代 Web 压缩(HTTP/2, HTTP/3 推荐)

  4. 压缩比与性能权衡

    • 压缩等级越高(9 / Brotli 11),压缩率更好但 CPU 占用更高。


✅ 总结:

  • zlib 模块提供了 同步 / 异步 / 流式 三类 API。

  • 常用 API:gzip/gunzipdeflate/inflatebrotliCompress/brotliDecompresscreateGzip/createGunzip

  • 典型场景:HTTP 内容压缩日志归档大文件存储Web 资源优化

http://www.dtcms.com/a/479485.html

相关文章:

  • wordpress怎么加入站长统计聊城网站建设策划建设公司
  • 优化网站的软件wordpress文章全部展示
  • 大型网站建设行情吉林长春建设工程信息网站
  • 在线网站做品牌网站怎么样
  • 从零开始认识大模型:它的过去、现在与未来以及核心原理
  • 中国风配色网站南京网站开发价格
  • 建设厅官方网站职称动漫制作专业什么电脑最适合
  • [笔记] 驱动开发:usbview编译过程
  • 泉州正规制作网站公司my8777网域名查询
  • hive join优化和数据倾斜处理
  • 计算机知识(二)
  • 网页设计与网站建设完全学习手册pdf网站建设开发价格
  • 哪些网站可以找到兼职做报表的wordpress 架站 电子书
  • [Qlib] `Strategy` | TopkDropout
  • 镇江网站建设制作公司wordpress主题二次开发
  • 小说网站建设方案网站开发域名注册功能
  • 函数封装的平衡艺术:以C++为例探讨适度封装
  • 泾川网站城镇建设规化图网站图标在哪里做修改
  • 住房和城乡建设部网站招聘冷链物流
  • dw里面怎么做网站轮播图建站的好公司
  • 县网站建设方案湖南城乡建设厅官方网站
  • 【AI学习笔记】用AI生成spring boot + redis
  • 如何用rp做网站seo推广系统
  • 易书网上书城网站建设方案江山网站制作
  • 【工业场景】用YOLOv8实现抽烟识别
  • 易语言怎么制作网站哪些网站做的海报比较高大上
  • TCP协议详解
  • 如何进行一个网站建设网站开发赚不赚钱
  • 【c++】:Lambda 表达式介绍和使用
  • 四川建设厅网站施工员证查询网站建设找盛誉网络