tauri中的wry和tao是干啥的?都是什么作用
简单来说:
-
tao - 是 跨平台应用程序窗口创建和事件循环管理 的底层库。它负责的是“应用程序”本身的生命周期。
-
wry - 是 跨平台 WebView 渲染引擎的抽象层。它负责的是在
tao
创建的窗口里“显示网页内容”。
你可以把它们想象成建造一个房子:
-
tao 是 地基、框架和窗户。它决定了房子建在哪里、有多大、有几个窗户,并处理风吹雨打等外部事件。
-
wry 是 房子里的电视或投影仪。它负责在窗户框出来的区域里,播放你想要的视频内容。
下面我们来详细解释一下。
1. Tao - 跨平台应用窗口
核心职责:创建和管理原生应用程序窗口、处理系统事件循环。
它具体做什么:
-
窗口创建:在不同操作系统(Windows, macOS, Linux, Android, iOS)上调用系统原生 API(如 Win32, Cocoa, GTK+)来创建和管理窗口。你可以设置窗口的标题、大小、位置、是否全屏等属性。
-
事件循环:运行一个主事件循环,监听并分发来自操作系统的各种事件,例如:
-
键盘按键、鼠标点击、触摸事件
-
窗口事件(移动、调整大小、最大化、最小化、关闭)
-
应用生命周期事件(启动、进入后台、恢复、退出)
-
-
菜单:创建和管理原生的应用程序菜单栏(macOS 顶部的菜单、Windows/Linux 的窗口菜单)。
为什么需要它?
Tauri 的目标是成为一个轻量级的跨平台桌面应用框架。它不希望依赖像 Electron 那样庞大的 Chromium 引擎来处理窗口创建和事件。tao
提供了一个极其精简和高效的抽象层,只做最基础的窗口管理,这使得 Tauri 应用的体积和内存占用都非常小。
一句话总结:tao
让 Tauri 应用能够作为一个“原生应用程序”在目标操作系统上运行起来。
2. Wry - 跨平台 WebView
核心职责:在 tao
创建的窗口中,嵌入并控制一个操作系统原生的 WebView。
它具体做什么:
-
WebView 抽象:它定义了一套统一的 API,让 Tauri 可以用同样的代码去操作不同操作系统上的 WebView 组件。
-
在 Windows 上,它使用 WebView2 (基于 Chromium)
-
在 macOS 上,它使用 WKWebView (基于 WebKit)
-
在 Linux 上,它使用 WebKitGTK (基于 WebKit)
-
-
渲染内容:负责在 WebView 中加载和显示你的前端界面(HTML, CSS, JavaScript)。
-
通信桥梁:它建立了 Rust 后端(Tauri 核心)和前端 JavaScript 之间的通信通道。你通过 Tauri 暴露的 Rust 命令,最终是通过
wry
来与前端进行交互的。
为什么需要它?
Tauri 的核心思想是“利用系统已有的 WebView”,而不是自己打包一个。这带来了巨大的优势:
-
体积小:应用打包时不需要包含整个浏览器引擎。
-
内存占用低:如果用户已经打开了使用相同 WebView 的应用(如 Edge),WebView 运行时可以被共享。
-
性能好:使用的就是操作系统提供的最新、最优化的 Web 渲染引擎。
一句话总结:wry
让 Tauri 应用能够在原生窗口里,安全、高效地显示你的 Web 前端界面,并实现前后端通信。
它们与 Tauri 的关系
Tauri 将 tao
和 wry
组合在一起,并在此基础上添加了更多强大的功能,形成了一个完整的应用框架。
工作流程:
-
Tauri 应用启动,调用
tao
来初始化应用程序实例和主窗口。 -
tao
开始运行事件循环,监听系统事件。 -
Tauri 调用
wry
,告诉它在tao
创建的窗口中创建一个 WebView。 -
wry
使用系统原生 API 创建 WebView,并将其嵌入到窗口中。 -
你的前端代码(HTML, JS, CSS)在这个 WebView 中加载和运行。
-
当用户与前端交互(如点击一个按钮调用 Rust 命令),
wry
负责将这个请求传递给 Tauri 的后端逻辑。 -
当系统事件发生时(如用户点击关闭按钮),
tao
会通知 Tauri,Tauri 可以执行相应的清理或阻止关闭逻辑。
总结对比表
特性 | Tao | Wry |
---|---|---|
核心职责 | 跨平台窗口管理与事件循环 | 跨平台 WebView 抽象与渲染 |
类比 | 房子的框架和窗户 | 房子里的电视/投影仪 |
依赖关系 | 不依赖 Wry | 依赖 Tao(因为 WebView 需要嵌入到一个窗口里) |
Tauri 中的作用 | 让应用成为原生应用 | 让应用能够显示Web界面并与之通信 |
希望这个解释能帮助你清晰地理解 wry
和 tao
在 Tauri 生态系统中的角色!