async zstd 慢 23 倍之谜:Node 修复未声明输入大小的隐藏代价

AI Snake Oil · rss · 2026-09-28

Cloudflare 工程师 Cherry 在给站点静态资源做构建期 zstd 预压缩时发现,Node.js 的 zlib.zstdCompress()(异步版)比同步版 zstdCompressSync() 慢 3-5 倍。

根因:同步版一次性把整个输入交给 zstd,zstd 能推断输入大小;异步版分多次调用写入并结束帧,zstd 从不知道输入长度,只能按无界流来分配压缩表,导致高压缩级别下性能急剧恶化。

他提交的 PR (#66358) 将 pledgedSrcSize 默认设为输入的字节长度,修复后异步输出与同步版字节一致。实测(162 个生产构建文件,单个最大约 370KB,Linux x64):level 9 从 300ms 降到 113ms,level 12 从 4521ms 降到 194ms,level 19 从 9696ms 降到 1474ms;Windows 表现相同。

原文链接 →

「Infra」频道最新

更多「Infra」频道 AI 资讯 →