| name | performance-doctor |
| description | Tauri 性能诊断技能,覆盖 Rust 编译优化、前端性能和应用体积优化。
触发场景:
- 应用启动慢或运行卡顿
- 需要优化 Rust 编译时间
- 需要减小安装包体积
- 需要分析前端渲染性能
触发词:性能、优化、慢、卡顿、编译时间、体积、内存、CPU、profiling、启动速度
|
Tauri 性能诊断
性能维度
| 维度 | 典型问题 | 工具 |
|---|
| Rust 编译时间 | 首次编译 5-15 分钟 | cargo build --timings |
| 应用启动速度 | 窗口打开慢 | Tauri DevTools |
| 前端渲染 | UI 卡顿/不流畅 | Chrome DevTools Performance |
| 内存使用 | 内存持续增长 | 任务管理器 / Chrome DevTools Memory |
| 安装包体积 | 包太大 | cargo bloat / Vite 分析 |
Rust 编译优化
加速开发编译
[profile.dev]
opt-level = 0
incremental = true
[profile.dev.package."*"]
opt-level = 2
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
strip = true
panic = "abort"
减少编译时间
[build]
前端性能优化
React 优化
const filteredItems = useMemo(() =>
items.filter(item => item.name.includes(search)),
[items, search]
);
const handleClick = useCallback((id: number) => {
invoke("delete_item", { id });
}, []);
const ListItem = React.memo(({ item }: { item: Item }) => (
<div>{item.name}</div>
));
import { useVirtualizer } from "@tanstack/react-virtual";
Vite 构建优化
export default defineConfig({
build: {
minify: "terser",
terserOptions: {
compress: { drop_console: true },
},
rollupOptions: {
output: {
manualChunks: {
vendor: ["react", "react-dom"],
},
},
},
},
});
安装包体积优化
分析体积
cargo install cargo-bloat
cd src-tauri && cargo bloat --release
pnpm add -D rollup-plugin-visualizer
优化策略
| 策略 | 效果 | 方法 |
|---|
| Rust LTO + strip | -30~50% | Cargo.toml profile.release |
| 前端 tree-shaking | -10~20% | Vite 自动处理 |
| 移除 console.log | -1~5% | terser drop_console |
| 压缩图标 | -1~3% | 使用优化后的 PNG/ICO |
| UPX 压缩 | -30~50% | upx --best target/release/app |
常见错误
| 错误做法 | 正确做法 |
|---|
| 不配置 release profile | 添加 LTO + strip + opt-level |
| 同步 Command 做耗时操作 | 使用 async Command 或 tokio::spawn |
| 大列表不用虚拟化 | 100+ 项使用 @tanstack/react-virtual |
| 不分析打包体积 | 使用 cargo bloat + Vite 分析器 |
| 每次 invoke 都建新连接 | 复用 State 中的数据库连接 |