compressionstream 不能直接压缩 html 字符串,仅支持 readablestream 输入;需先用 textencoder 转为 uint8array 并封装为流,再通过 pipethrough 处理,且仅 chromium 和 firefox 支持,safari 不支持。

HTML 本身不提供 Compression Streams API 的直接支持,浏览器仅在特定条件下暴露 CompressionStream 和 DecompressionStream —— 它们只工作于 ReadableStream / WritableStream 管道中,且目前仅 Chromium 系(Chrome、Edge ≥117)和 Firefox ≥125 支持,Safari 仍完全不支持。
CompressionStream 能不能直接压缩 HTML 字符串?
不能。它不接受字符串或 ArrayBuffer,只接受流式数据源。想压缩一段 HTML 文本,必须先转成 Uint8Array,再包进 ReadableStream:
- 错误写法:
new CompressionStream('gzip').compress(htmlString)→ 报TypeError: compress is not a function - 正确路径:
new TextEncoder().encode(htmlString)→Uint8Array→new ReadableStream({ start(c) { c.enqueue(encoded); c.close(); } })→ 管道接入CompressionStream - 实际更常用的是:用
Response构造器包装原始 HTML,再调用response.body.pipeThrough(new CompressionStream('gzip')),适合 Service Worker 场景
DecompressionStream 解压 ZIP 文件行不行?
不行。它只处理原始压缩流(如 gzip、deflate、br),不是 ZIP 解包器。ZIP 是容器格式,含目录结构、文件元信息、校验和等 —— DecompressionStream 对这些一无所知。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 常见误解:看到
Content-Encoding: gzip就以为能用DecompressionStream解 ZIP → 实际上 ZIP 文件的 MIME 是application/zip,不是gzip - 真正要解 ZIP,必须用
JSZip或@zip.js/zip.js;DecompressionStream只适用于从fetch()拿到已由服务端 gzip 压缩的 HTML/JS/CSS 响应体后,在前端做二次解压(极少需要) - 若你拿到的是一个 .gz 文件(非 .zip),且确认是纯 gzip 流,那才可以:
response.body.pipeThrough(new DecompressionStream('gzip'))
为什么 new CompressionStream('brotli') 报错?
因为 Brotli 不在所有浏览器的 CompressionStream 支持列表里。目前只有 Chrome/Edge 支持 'gzip' 和 'deflate';Brotli('br')尚未标准化进该 API,调用会抛 DOMException: Unsupported compression format。
- 检查支持性:
typeof CompressionStream !== 'undefined' && 'gzip' in supportedFormats(需手动探测,无现成枚举) - 不要依赖
navigator.userAgent判断,而要用try/catch包裹构造过程 - 服务端已用 Brotli 压缩?前端无需、也不该再解——浏览器自动处理;你想在前端生成 Brotli 流?目前只能靠 WebAssembly 库(如
brotli-wasm),不是原生 API
真正容易被忽略的是:Compression Streams API 是流式、不可逆、无缓冲的。一旦管道开始,就无法中途取中间结果,也无法 rewind —— 它不是为“压缩一段字符串然后拿 base64”设计的,而是为 Service Worker 缓存重写、实时日志压缩这类长生命周期流场景准备的。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










