Minifier
JavaScript 压缩能明显减少下发体积、加快页面加载,对网站优化至关重要; 对电商等业务而言,秒的差距往往对应巨大的经济价值。
传统压缩器往往在「压缩质量」与「速度」之间权衡:要么很慢换最好压缩,要么快但压缩差一点。 若在不牺牲压缩比的前提下再大幅提速会如何?
目标
我们正在积极开发原型,把 google-closure-compiler、terser、esbuild、tdewolff-minify 等知名压缩器的测试用例悉数移植进来。
初步结果证明我们仍在既定轨道上: 使用 Oxc minifier,可在不明显牺牲压缩质量的情况下显著缩短压缩时间。
目标性能
- 速度:快于 Terser,能与 esbuild 竞争
- 压缩率:达到或优于 Terser
- 正确性:通过主流压缩器的主流测试套件
架构概览
设计原则
- 语义感知:用语义分析驱动安全优化
- 增量友好:适配增量编译工作流
- 可配置:支持多级优化与目标设定
- 正确优先:激进优化让步于语义正确
当前状态
已实现特性
- ✅ 死代码消除
- ✅ 常量折叠
- ✅ Tree Shaking(基础——移除未使用的导出)
- ✅ 变量合并
- ✅ 语句合并
- ✅ 名称混淆
- ✅ 控制流优化
- ✅ 函数内联
- ✅ 进阶 Tree Shaking(跨模块)
性能策略
- 减少 AST 趟数:在多趟优化合并为少数几次遍历
- 高效数据结构:arena、紧凑布局
- 早终止:没有收益即可跳过
资源
文档
外部参考
在线游乐场
- esbuild:https://esbuild.github.io/try
- rollup:https://rollupjs.org/repl
- swc:https://play.swc.rs
- terser:https://try.terser.org
- closure compiler:https://jscompressor.treblereel.dev(官方 Webservice 已停运说明)