跳到内容
Tauri

进程模型

Tauri 采用类似于 Electron 或许多现代网络浏览器的多进程架构。本指南探讨了这种设计选择背后的原因以及它对于编写安全应用程序的重要性。

在 GUI 应用程序的早期,通常使用单个进程来执行计算、绘制界面和响应用户输入。正如你可能猜到的那样,这意味着一个长时间运行的、昂贵的计算会使用户界面无响应,或者更糟的是,应用程序中的一个组件失败会导致整个应用程序崩溃。

显然需要一种更具弹性的架构,应用程序开始在不同的进程中运行不同的组件。这更好地利用了现代多核 CPU,并创建了更安全的应用程序。一个组件的崩溃不再影响整个系统,因为组件在不同的进程中是隔离的。如果一个进程进入无效状态,我们可以轻松地重新启动它。

我们还可以通过仅向每个进程授予最低限度的权限来限制潜在漏洞的爆炸半径,这些权限仅足够它们完成工作。这种模式被称为最小权限原则,你可以在现实生活中经常看到它。如果你雇佣一个园丁来修剪你的树篱,你会把花园的钥匙给他们。你**不会**把你房子的钥匙给他们;他们为什么需要访问那些东西?同样的道理也适用于计算机程序。我们给它们的访问权限越少,它们在受到攻击时造成的损害就越小。

每个 Tauri 应用程序都有一个核心进程,它充当应用程序的入口点,并且是唯一具有完全操作系统访问权限的组件。

核心进程的主要职责是利用该访问权限来创建和协调应用程序窗口、系统托盘菜单或通知。Tauri 实现了必要的跨平台抽象以使其变得容易。它还将所有进程间通信通过核心进程路由,允许你在一个中心位置拦截、过滤和操纵 IPC 消息。

核心进程还应负责管理全局状态,例如设置或数据库连接。这允许你在窗口之间轻松同步状态,并保护你的业务敏感数据不被前端窥视。

我们选择 Rust 来实现 Tauri,因为它拥有所有权概念,这在保留出色性能的同时保证了内存安全。

Diagram
Tauri 进程模型的简化表示。单个核心进程管理一个或多个 WebView 进程。

核心进程本身不渲染实际的用户界面 (UI);它会启动利用操作系统提供的 WebView 库的 WebView 进程。WebView 是一个类似浏览器的环境,它执行你的 HTML、CSS 和 JavaScript。

这意味着传统 Web 开发中使用的许多技术和工具都可以用于创建 Tauri 应用程序。例如,许多 Tauri 示例都是使用 Svelte 前端框架和 Vite 打包器编写的。

安全最佳实践也适用;例如,你必须始终清理用户输入,绝不在前端处理敏感信息,并且最好将尽可能多的业务逻辑推迟到核心进程,以减小攻击面。

与其他类似解决方案不同,WebView 库**不**包含在你的最终可执行文件中,而是在运行时动态链接1。这使得你的应用程序*显著*更小,但这也意味着你需要像传统 Web 开发一样,注意平台差异。

  1. 目前,Tauri 在 Windows 上使用 Microsoft Edge WebView2,在 macOS 上使用 WKWebView,在 Linux 上使用 webkitgtk


© 2025 Tauri 贡献者。CC-BY / MIT