codecamp

Tauri Rust 编译时优化

为了减小 Rust 可执行文件的大小,你可以配置 Cargo 项目以充分利用 Rust 的大小优化功能。以下是一些推荐的选项,以便在构建 Tauri 应用程序时减小可执行文件的大小:

[profile.release]
panic = "abort" # 去除昂贵的 panic 清理逻辑 codegen-units = 1 # 一个接一个地编译 crate,以便编译器能够更好地进行优化 lto = true # 启用链接优化 opt-level = "s" # 为二进制大小进行优化 strip = true # 去除调试符号

上述选项的含义如下:

  • panic = "abort":当发生 panic 时,去除昂贵的 panic 清理逻辑。
  • codegen-units = 1:一个接一个地编译 crate,以便编译器能够更好地进行优化。
  • lto = true:启用链接优化。
  • opt-level = "s":为二进制大小进行优化。
  • strip = true:去除调试符号。

需要注意的是,也可以使用 opt-level = "z" 来减小生成的二进制文件的大小。"s" 和 "z" 有时会产生不同大小的文件,因此建议对你的应用程序进行测试,以确定哪个选项效果更好。

另外,如果你的 Rust 项目使用了 Tauri 并且默认情况下启用了资源压缩功能,你也可以考虑禁用 Tauri 的资源压缩来减小可执行文件的大小。在 Cargo.toml 文件中,通过将 default-features 设置为 false 并指定除压缩功能之外的所有功能,来禁用资源压缩。例如:

[dependencies]
tauri = { version = "...", features = ["objc-exception", "wry"], default-features = false }

请注意,下面提到的一些方法涉及使用不稳定的编译器特性,并需要 Rust 的 nightly 版本。如果你使用的是 nightly 版本的 Rust,你可以尝试以下操作来设置 nightly 工具链并添加 rust-src nightly 组件:

rustup toolchain install nightly
rustup component add rust-src --toolchain nightly

然后,你可以创建一个名为 rust-toolchain.toml 的文件,以告诉 Cargo 使用 nightly 工具链。文件内容如下:

[toolchain]
channel = "nightly-2023-01-03" # 使用的 nightly 版本,你可以更新为最新版本 profile = "minimal"

最后,你可以使用以下命令来为 std 库应用优化选项:

cargo tauri build --target <目标三元组> -- -Z build-std

如果在发布配置的优化中使用了 panic = "abort",你需要确保 panic_abort crate 使用了 std。此外,可以进一步减小二进制文件大小,如下所示:

cargo tauri build --target <目标三元组> -- -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort

这些选项都涉及到使用不稳定的编译器特性,并需要 Rust 的 nightly 版本。请查阅不稳定特性文档以获取更多关于 -Z build-std 和 -Z build-std-features 的详细信息。


Tauri 配置 Allowlist
Tauri Stripping
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Tauri 指南

Tauri 特性

Tauri 插件

Tauri 应用程序接口

Tauri JavaScript/TypeScript

Tauri 命令行界面

Tauri 进程

Tauri 参考

Tauri WebView 版本

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }