Chrome80+ 支持原生的 gzip 压缩 /解压缩,支持流模式。一个简单的用法:
function gzipImpl(cls, algo, data) {
const {writable, readable} = new cls(algo)
const writer = writable.getWriter()
writer
.write(data)
.then(_ => writer.close())
return new Response(readable).arrayBuffer()
}
const gzip = gzipImpl.bind(0, CompressionStream, 'gzip')
const gunzip = gzipImpl.bind(0, DecompressionStream, 'gzip')
// test
const srcData = new Uint8Array(10000)
const zipData = await gzip(srcData)
const unzipData = await gunzip(zipData)
// src: 10000 zip: 45
console.log('src:', srcData.length, 'zip:', zipData.byteLength)
console.assert(srcData.length === unzipData.byteLength)