跳到内容
Tauri

进程模型

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

为什么使用多进程?

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

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

我们还可以通过仅向每个进程分配最少量的权限来限制潜在漏洞的爆发半径,这些权限仅足以完成其工作。 这种模式被称为最小特权原则,您在现实世界中经常看到它。 如果您有园丁过来修剪树篱,您会给他们花园的钥匙。 您不会给他们您房子的钥匙;他们为什么要访问那个? 相同的概念适用于计算机程序。 我们给予他们的访问权限越少,如果他们被攻破,他们可能造成的危害就越小。

核心进程

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

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

核心进程还应负责管理全局状态,例如设置或数据库连接。 这使您可以轻松地在窗口之间同步状态,并保护您的业务敏感数据免受前端窥探。

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

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

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