Node.js 异步 zstd 压缩慢 23 倍,一个 PR 修复性能黑洞

DanielLockyer · x · 2026-09-28

开发者 Cherry 发现 Node.js 的 zlib.zstdCompress()(异步版)在压缩同一批文件时比 zstdCompressSync() 慢 3-5 倍,甚至可达 23 倍(4.5s → 0.19s)。

原因:同步版一次性把输入交给 zstd,zstd 能推断输入大小;异步版分多次写入并在单独调用中结束帧,zstd 始终不知道输入大小,只能按无界流来分配内部表,导致性能大幅下降。

修复:向 Node.js 提交的 PR #66358 在 zstdCompress() 中默认把 pledgedSrcSize 设为输入的字节长度。实测 162 个生产构建的 JS/CSS/SVG 文件(单个最大约 370KB,Linux x64),修复后异步输出与同步版完全一致,且各压缩级别均大幅提速:level 9 从 300ms 降至 113ms,level 12 从 4521ms 降至 194ms,level 19 从 9696ms 降至 1474ms。Windows 上表现相同。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →