js实现gzip
使用 pako 库实现 Gzip 压缩与解压
pako 是一个流行的 JavaScript 库,提供高效的 zlib 压缩和解压功能,支持 Gzip 格式。
安装 pako:
npm install pako
# 或直接通过 CDN 引入
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako.min.js"></script>
压缩字符串示例:

const pako = require('pako');
const originalString = "This is a string to be compressed";
const compressed = pako.gzip(originalString);
// 转换为 Base64 便于传输
const compressedBase64 = btoa(String.fromCharCode.apply(null, compressed));
解压字符串示例:
const decompressed = pako.ungzip(
Uint8Array.from(
atob(compressedBase64)
.split('')
.map(c => c.charCodeAt(0))
)
);
const result = new TextDecoder().decode(decompressed);
使用浏览器内置 Compression Streams API
现代浏览器支持 Compression Streams API,无需第三方库:

压缩示例:
async function compressGzip(input) {
const stream = new Blob([input]).stream();
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
return await new Response(compressedStream).blob();
}
解压示例:
async function decompressGzip(input) {
const stream = new Blob([input]).stream();
const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));
return await new Response(decompressedStream).text();
}
Node.js 内置 zlib 模块
Node.js 环境可直接使用内置模块:
const zlib = require('zlib');
const fs = require('fs');
// 压缩文件
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'));
注意事项
- 浏览器端 Gzip 压缩主要适用于文本数据,二进制数据可能需要特殊处理
- 大文件建议使用流式处理避免内存问题
- 跨浏览器兼容性需要考虑,老版本浏览器可能需要 polyfill
- 服务端设置正确的 Content-Encoding 响应头
以上方法根据不同运行环境提供了 JavaScript 实现 Gzip 压缩/解压的解决方案,选择时需考虑目标平台支持情况。






