当前位置:首页 > 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);

解压字符串:

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);
});

解压数据:

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);
  }
});

解压文件或数据:

js 实现 gzip

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实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…