在 Tauri 项目中,Rust 代码负责核心逻辑,编译速度与最终二进制大小直接影响开发体验和用户下载更新。通过合理配置,可以在不牺牲安全性的前提下,让编译更快、包体更小。
1. 加快编译速度
Rust 的编译速度通常比前端打包慢,尤其在依赖较多时。以下配置能让迭代更快:
# Cargo.toml
[profile.dev]
opt-level = 1 # 开发模式下做轻度优化,编译时间比默认的 0 稍长,但运行时更快
incremental = true # 启用增量编译,修改少量代码后只重编译变化的部分
[profile.release]
lto = "thin" # 使用 ThinLTO(链接时优化),比 full LTO 快得多,也能减小体积
codegen-units = 16 # 增大代码生成单元数量,利用多核并行编译,加快发布构建速度
opt-level = 1:相比默认的 0 级(完全不优化,编译最快但运行极慢),1 级做了一些简单优化,运行时性能明显改善,而且编译时间增加很小。这对 Tauri 开发中频繁重启应用很有帮助。incremental:默认开启,能大幅减少重复编译时间。如果因为某些原因关闭了,记得重新打开。codegen-units:发布构建时默认是 16,开发模式下可保持不变。如果遇到链接错误或想进一步优化体积,可以降低到 1(但编译会变慢很多)。
IDE 与工具链
使用 RustRover、VS Code + rust-analyzer 时,可设置 "rust-analyzer.cargo.features": "all" 避免重复分析。同时确保使用最新稳定版 Rust 工具链,编译器性能本身也在持续提升。
2. 减小最终二进制体积
Tauri 应用里,Rust 内核加上 WebView 壳是体积的主要组成。WebView 由系统提供,我们能优化的是 Rust 编译产物。
[profile.release]
opt-level = "s" # 优化体积,而不是速度。"s" 和 "z" 可进一步压缩,"z" 更激进
lto = true # 启用链接时优化,有利于死代码消除和内联
strip = true # 去除符号表等调试信息,体积能减少 30%-50%
codegen-units = 1 # 单代码生成单元让 LTO 更彻底,但编译时间显著增加
panic = "abort" # 发生 panic 时直接终止,不生成栈展开代码,可减小编译结果
分步建议(平衡体积与编译时间):
- 默认加入
strip = true:几乎无编译时间成本,体积立减。 - 将
opt-level设为"s":常见 crate 测试表明,从3降到"s"能减少 10-30% 体积,性能损失通常可接受(对桌面应用 GUI 操作几乎无感)。 - 谨慎使用
codegen-units = 1与lto = true:会显著增加编译时间(可能翻倍),建议只在 CI 最终发布构建时开启。日常迭代可用lto = "thin"和codegen-units = 16。 panic = "abort":若你的 Rust 后端不依赖 unwind 来捕获 panic,可安全使用。Tauri 本身对 panic 做了捕获处理,不会让整个应用崩溃,开启 abort 可缩小体积且不影响基本行为。
第三方库裁剪
- 仔细检查
Cargo.toml中是否启用了不必要的 feature,例如很多 crate 的默认 feature 可能包含 serde 的derive宏,若不需要可关闭。 - 使用
cargo-udeps找出未使用的依赖并移除。 - 替换过于庞大的依赖:如需要小 JSON 解析,可用
miniserde替代serde_json。
3. 减少 Rust 依赖对 Tauri 打包的影响
Tauri 的二进制最终会被嵌入到各个平台安装包中。在 Windows 上,.exe 本身的大小就是 Rust 二进制大小;在 macOS 和 Linux 上,还包含框架和资源文件,但 Rust 部分仍是主体。
- 开启
strip后,一个小型 Tauri 应用的 Rust 内核大约在 1~4 MB,加上 WebView 壳和前端资源,总体安装包仍能保持在 10 MB 以内。 - 对比:若不开任何体积优化,同样功能的 Rust 内核可能膨胀到 10 MB 以上。
一次典型优化后的 Cargo.toml 示例:
[profile.release]
opt-level = "s"
lto = true
strip = true
codegen-units = 1
panic = "abort"
一句话总结:开发期间追求编译速度,用 opt-level = 1、增量编译、多 codegen-unit;发布时追求体积,用 opt-level = "s"、lto、strip 和 panic = "abort",并清理多余依赖。这样在数分钟内就能完成优化,换来用户下载和更新时的小体积惊喜。