跳转到内容
Tauri

流程模型

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

为何需要多个进程?

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

很明显,需要更健壮的体系结构,因此应用程序开始在不同进程中运行不同的组件。这使得更充分地利用现代多核 CPU,并创建出更加安全的程序。一个组件的崩溃不会影响整个系统了,因为组件在不同的进程上被隔离。如果进程进入一个无效状态,我们很容易重启它。

我们还可以通过只为每个进程分配最少的权限来限制潜在漏洞的影响范围,即足以完成他们的工作。这种模式被称为“最小权限原则”,你在现实生活中经常可以看到。如果你有一个园丁来剪你的树篱,你给他花园的钥匙。你不会给他房子的钥匙;他们为什么需要进入那里呢?同样的概念也适用于计算机程序。我们给予他们的访问权限越少,如果他们被入侵,造成的危害就越小。

核心进程

每个 Tauri 应用程序都有一个核心进程,它是应用程序的入口点,也是唯一拥有完整操作系统访问权限的组件。

核心的主要责任是利用这种访问权限来创建和编排应用程序窗口、系统托盘菜单或通知。Tauri 实现了必要的跨平台抽象来简化这一过程。它还通过核心进程路由所有的进程间通信,允许你在单个中心位置拦截、过滤和操作 IPC 消息。

核心进程还应负责管理全球状态,如设置或数据库连接。这使得你能够轻松地在窗口之间同步状态,并保护你的商业敏感数据不受前端好奇 Eyes 的侵害。

我们之所以选择 Rust 实现 Tauri,是因为它的所有权概念确保了内存安全的同时,保持了优异的性能。

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

WebView 进程

Core 进程本身不渲染用户界面 (UI);它会启动利用操作系统提供的 WebView 库的 WebView 进程。WebView 是一种类似于浏览器的环境,可以执行您的 HTML、CSS 和 JavaScript。

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

同样适用安全最佳实践;例如,您必须始终清理用户输入,前端永不处理机密信息,并且理想情况下将尽可能多的业务逻辑推迟到 Core 进程以缩小攻击面。

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

脚注

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


© 2025 Tauri 贡献者。CC BY / MIT