进程模型(Process Model)
Tauri 采用类似于 Electron 或许多现代 Web 浏览器的多进程架构。 本指南解释了这种设计选择的原因,以及为什么它对于编写安全的应用程序至关重要。 ([Tauri][1])
为什么使用多个进程?(Why Multiple Processes)
在图形用户界面(GUI)应用程序的早期阶段,通常使用一个单一进程来:
- 执行计算
- 绘制界面
- 响应用户输入
正如你可能猜到的,这种设计存在问题:如果出现长期运行的、耗时的计算,会导致整个界面 无响应(UI 阻塞);更糟的是,当一个组件失败时,整个应用可能崩溃。 ([Tauri][1])
为了提高稳定性和安全性,应用程序采用了 多进程架构:
- 不同组件运行在不同进程中
- 可以更好利用现代多核 CPU
- 一个进程出错不会影响其他进程
此外,可以根据 最小权限原则(Principle of Least Privilege),只分配必要权限给每个进程,从而限制潜在安全风险的影响范围。 ([Tauri][1])
类比真实世界:如果请园丁修剪篱笆,只给他花园门钥匙,而不会给房子钥匙;程序权限同理。 ([Tauri][1])
核心进程(The Core Process)
每个 Tauri 应用都有一个 核心进程(Core Process):
- 它是应用程序的 入口点
- 是唯一具有 完整操作系统访问权限 的组件 ([Tauri][1])
核心进程的主要职责包括:
- 创建和管理应用窗口
- 创建系统托盘菜单
- 发送和协调通知
- 管理所有 进程间通信(IPC)
所有的 IPC 都由核心进程统一路由,这样可以:
- 在中心统一位置 拦截 / 过滤 / 修改消息
- 管理应用的全局状态,例如设置、数据库连接等
- 保护敏感数据不被前端窃取 ([Tauri][1])
Tauri 使用 Rust 实现核心进程,因为它通过所有权机制保证了:
- 高性能
- 内存安全 ([Tauri][1])
🚀 通常一个 Tauri 应用只有一个核心进程,它会启动一个或多个 WebView 进程(见下文)。 ([Tauri][1])
WebView 进程(The WebView Process)
核心进程本身 不直接渲染 UI。 它负责启动一个或多个 WebView 进程,每个 WebView 进程负责:
- 使用操作系统提供的 WebView 库
- 执行你的前端代码:HTML / CSS / JavaScript
WebView 本质上是一个 浏览器环境,因此你在传统 Web 开发中使用的大多数技术都能在 Tauri 中复用。 例如常见前端框架就可以在 WebView 中运行:Svelte、Vue、React + Vite 等。 ([Tauri][1])
从安全性角度来说:
- 必须对所有用户输入进行 清理(sanitize)
- 不要在前端处理敏感信息
- 尽可能把业务逻辑放到核心进程执行,以减小攻击面 ([Tauri][1])
与一些其他技术不同的是:
WebView 库不是捆绑进最终二进制中,而是在运行时 动态链接。 这让应用体积大幅缩小,但也要注意平台间的差异(类似传统浏览器兼容性问题)。 ([Tauri][1])
当前平台选择如下:
- Windows:Microsoft Edge WebView2
- macOS:WKWebView
- Linux:webkitgtk ([Tauri][1])
核心总结
Tauri 的进程模型可以简要描述为:
单 一 核 心 进 程
↓
多 个 WebView 进 程
其中:
- 核心进程 管理生命周期、IPC、窗口、菜单、全局状态
- WebView 进程 负责 UI 渲染和前端逻辑
这种架构融合了:
- Web 技术的灵活性(HTML / CSS / JS)
- 原生系统访问和能力(Rust + OS WebView) ([Tauri][1])
如需进一步深入 IPC、权限设计、生命周期管理等概念,我也可以帮你整理成总结或工程实践指南。
| [1]: https://v2.tauri.app/zh-cn/concept/process-model/?utm_source=chatgpt.com “进程模型 | Tauri” |
