菜单

核心概念

相关源文件

本文档介绍了 Tauri 框架的基础概念和构建块。理解这些核心概念对于高效开发 Tauri 应用程序至关重要。本页重点阐述了驱动 Tauri 应用程序的核心架构和机制,包括 Webview、IPC 系统、命令、事件以及其他基本组件。

有关具体实现的详细信息,请参阅 核心架构 页面。

架构概述

Tauri 采用分层架构,通过 Rust 将 Web 技术与原生功能连接起来。

架构图:Tauri 的分层结构

来源:README.md12-18 ARCHITECTURE.md8-18

Tauri 应用程序由以下部分组成:

  1. 前端层:用于用户界面的 Web 技术(HTML、CSS、JavaScript)
  2. 核心层:基于 Rust 的后端,处理业务逻辑并与系统接口
  3. 平台层:通过抽象访问的原生操作系统功能

Webview

Webview 是 Tauri 应用程序的基础,它在原生窗口中渲染 Web 内容,而无需打包完整的浏览器。

图示:Tauri 中的 Webview

来源:README.md14-16 ARCHITECTURE.md83-86

Webview 的主要特点

  • 使用系统的原生 Webview(而非捆绑的 Chromium 实例)
  • 通过一致的 API 支持所有主流平台
  • 通过 tauri-runtime-wry crate 进行管理
  • 与 Electron 等框架相比,捆绑包大小显著减小

IPC 系统

进程间通信(IPC)系统是 Webview 中的 JavaScript 与后端中的 Rust 之间的桥梁。

图示:IPC 通信流程

来源:crates/tauri/src/ipc/channel.rs25-42 examples/api/src-tauri/src/lib.rs12-18

IPC 系统

  • 使用 JSON 在 JavaScript 和 Rust 之间传递消息
  • 处理语言之间数据的序列化/反序列化
  • 在 Webview 和系统之间建立安全边界
  • 为双向通信提供一致的 API

命令

命令是向 JavaScript 公开 Rust 函数的主要机制,允许前端代码调用后端函数。

图示:命令注册和调用

来源:examples/api/src-tauri/src/lib.rs146-152 crates/tauri-macros/src/command/handler.rs1-169

命令系统的主要方面

  • 命令使用 #[tauri::command] 宏在 Rust 中定义
  • 使用 generate_handler! 宏向应用程序注册
  • 可以接受各种参数类型,包括应用程序状态
  • 自动处理参数和返回值的序列化
  • 构成了前端和后端之间 API 的基础

事件系统

事件系统支持应用程序不同部分之间的双向消息传递,无需直接函数调用。

图示:事件通信流程

来源:examples/api/src-tauri/src/lib.rs129-143

事件系统提供:

  • 组件之间的松耦合
  • 全局和窗口范围事件
  • 监听特定系统事件(如窗口关闭)的能力
  • 支持一次性监听器和持久监听器
  • 事件有效负载在 JavaScript 和 Rust 之间的传输

通道 API

通道提供 JavaScript 和 Rust 之间的流式通信机制,非常适合连续数据传输或长时间运行的操作。

图示:通道通信

来源:crates/tauri/src/ipc/channel.rs46-289 examples/api/src-tauri/src/lib.rs85-98

通道的主要特点

  • 允许 JavaScript 和 Rust 之间传输流式数据
  • 通过优化传输支持大型有效负载
  • 双向通信
  • 处理连续更新,无需重复函数调用
  • 适用于进度报告、实时数据和长时间运行的任务

App 和 AppHandle

App 和 AppHandle 结构管理应用程序生命周期并提供对核心功能的访问。

图示:应用程序生命周期和组件

来源:examples/api/src-tauri/src/lib.rs37-159

App 和 AppHandle

  • 提供对应用程序窗口和状态的访问
  • 管理应用程序生命周期
  • 处理事件分发
  • 控制应用程序范围的设置
  • 管理插件
  • 访问窗口创建和管理

窗口管理

Tauri 应用程序可以创建和管理多个窗口,每个窗口都有自己的 Webview 内容。

图示:窗口管理系统

来源:examples/api/src-tauri/src/lib.rs69-80 examples/api/src-tauri/src/lib.rs179-184

窗口管理中的关键概念

  • 窗口以唯一的标签创建以进行标识
  • 每个窗口包含自己的 Webview
  • 窗口可以通过各种属性进行配置(大小、装饰等)
  • 可以通过编程方式操作窗口(显示、隐藏、关闭等)
  • 窗口状态更改的事件(聚焦、失焦、大小调整等)

状态管理

状态管理系统允许在应用程序的不同部分共享数据。

图示:Tauri 中的状态管理

来源:examples/api/src-tauri/src/lib.rs58 crates/tauri/src/ipc/channel.rs310-313

状态管理提供:

  • 对共享数据的线程安全访问
  • 通过泛型进行类型安全的访问
  • 依赖注入到命令处理程序
  • 存储和检索应用程序状态的能力
  • 在应用程序不同部分之间共享数据的机制

构建和打包系统

Tauri 包括一个全面的构建和打包系统,用于将应用程序打包分发。

图示:构建和打包过程

来源:README.md22-28 ARCHITECTURE.md166-178

构建和打包系统

  • 可通过 tauri.conf.json 进行配置
  • 编译和打包 Web 资源
  • 编译 Rust 后端
  • 创建特定于平台的安装程序
  • 处理代码签名和更新
  • 支持移动平台(iOS/Android)

插件系统

Tauri 的插件系统可以扩展功能并在应用程序之间共享可重用组件。

图示:插件架构

来源:examples/api/src-tauri/src/lib.rs42-48 crates/tauri/src/ipc/channel.rs330-337 ARCHITECTURE.md106-118

插件系统提供:

  • 核心功能模块化扩展
  • 标准的集成接口
  • 用于前端访问的 JavaScript API
  • 跨多个应用程序的可重用组件
  • 访问特定于平台的功能

命令标识符和 ACL

Tauri 使用命令标识符系统通过访问控制列表(ACL)来管理权限和安全。

图示:命令标识符系统

来源: crates/tauri-utils/src/acl/identifier.rs11-21 crates/tauri-macros/src/command/handler.rs92-141

命令标识符系统

  • 使用前缀来标识命令类型
  • 核心命令使用 core: 前缀
  • 插件命令使用 plugin:name| 格式
  • 应用程序命令没有前缀
  • 通过 ACL 强制执行安全边界
  • 防止未经授权的命令执行

结论

这些关键概念构成了 Tauri 应用程序的基础。理解这些组件如何协同工作对于使用 Tauri 构建有效的应用程序至关重要。

有关特定实现的更详细信息,请参阅 核心架构 文档中的相关部分。