当前位置:首页 > JavaScript

js 实现 gzip

2026-02-01 12:18:18JavaScript

使用 pako 库实现 Gzip 压缩与解压

pako 是一个流行的 JavaScript 库,支持 Gzip、Deflate 和 Zlib 格式的压缩与解压。以下是具体实现方法。

安装 pako

npm install pako

压缩字符串:

import pako from 'pako';

const originalString = 'This is a string to be compressed with Gzip.';
const compressedData = pako.gzip(originalString);
const compressedString = String.fromCharCode.apply(null, compressedData);
console.log('Compressed:', compressedString);

解压字符串:

js 实现 gzip

const charData = compressedString.split('').map(c => c.charCodeAt(0));
const restoredData = pako.ungzip(new Uint8Array(charData));
const restoredString = String.fromCharCode.apply(null, restoredData);
console.log('Decompressed:', restoredString);

使用浏览器内置 API(Compression Streams)

现代浏览器支持 Compression Streams API,可直接进行 Gzip 操作,无需第三方库。

压缩数据:

async function compressWithGzip(input) {
  const stream = new Blob([input]).stream();
  const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
  const compressedBlob = await new Response(compressedStream).blob();
  return await compressedBlob.arrayBuffer();
}

compressWithGzip('Test data').then(compressed => {
  console.log('Compressed:', compressed);
});

解压数据:

js 实现 gzip

async function decompressGzip(input) {
  const stream = new Blob([input]).stream();
  const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));
  const decompressedBlob = await new Response(decompressedStream).blob();
  return await decompressedBlob.text();
}

decompressGzip(compressedData).then(decompressed => {
  console.log('Decompressed:', decompressed);
});

Node.js 内置 zlib 模块

Node.js 原生支持 zlib 模块,可直接用于 Gzip 操作。

压缩文件或数据:

const zlib = require('zlib');
const fs = require('fs');

const input = 'Data to compress';
zlib.gzip(input, (err, buffer) => {
  if (!err) {
    fs.writeFileSync('output.gz', buffer);
  }
});

解压文件或数据:

const compressedData = fs.readFileSync('output.gz');
zlib.gunzip(compressedData, (err, buffer) => {
  if (!err) {
    console.log('Decompressed:', buffer.toString());
  }
});

注意事项

  • 浏览器 API 兼容性:Compression Streams API 需要 Chrome >= 80 或 Firefox >= 111。
  • 性能考虑:pako 适用于全平台,而浏览器 API 和 Node.js 原生模块性能更优。
  • 二进制数据处理:压缩后的数据是二进制格式,需用 Uint8ArrayArrayBuffer 处理。

标签: jsgzip
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…