用途:系统化缩减 Rust 二进制体积,适用于 CLI、服务端、库、WASM 与嵌入式目标。核心原则是先测量后修改、幂等、确定性、正确性优先,并按层级组织优化:安全层(不改变行为)、行为层(改变 panic/调试行为)、nightly 层(需 nightly 工具链)、结构层(改代码)。
主要能力与用法:
- 侦察:用 find . -name Cargo.toml -not -path '/target/' | head -20 定位清单,读取 [profile.release] 与 .cargo/config.toml,检查 rustc --version、cargo --version、rustup show active-toolchain,测量基线体积与编译时间。
- 安全层:在 [profile.release] 设置 strip = true、lto = true、codegen-units = 1、opt-level = "z"(计算密集可试 "s")。
- 行为层:panic = "abort"(会禁用 catch_unwind、panic 时不运行析构、无回溯),需先征得用户同意。
- 依赖审计:cargo install cargo-bloat 后运行 cargo bloat --release --crates -n 20;用 cargo tree --duplicates 查重复版本;检查 ring 与 aws-lc-rs 双后端;用 cargo tree --edges features -p <crate> 审计特性;cargo-llvm-lines 查单态化膨胀;cargo-unused-features 查未用特性。
- nightly 层:rustup toolchain install nightly、rustup component add rust-src --toolchain nightly,用 cargo +nightly build --release -Z build-std=std,panic_abort -Z build-std-features="optimize_for_size" --target <host-triple>;可加 -Zshare-generics=y、-Zlocation-detail=none。
限制:LTO 与 codegen-units=1 会显著增加编译时间;strip 会丢失回溯符号;panic=abort 改变运行时行为;nightly 技术需切换工具链。资料未提供具体价格、平台支持范围与实测收益数据。