Tauri教程-基础篇-第二节 Tauri的核心概念上篇
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
“有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
“维持现状意味着空耗你的努力和生命。”——纪伯伦
第二节 Tauri的核心概念(上篇)
前言
本章节阐述了Tauri技术中的核心概念内容,理解起来较为苦涩,但却为Taui应用的概念部分,了解这些概念后你将对Tauri的技术原理有一个较深的理解,为你后续开发应用和进行插件的开发奠定基础,初次理解较为困难,有一定的编语言程基础,可较为轻松,本章节分为上下2个部分,分别阐述了Tauri的五个核心部分
- 结构
- 进程模型
- App size
- IPC
- 安全
上部分介绍了Tauri的骨架结构、进程模型、应用大小配置,下部分介绍了Tauri的ipc(通信模型)和安全相关的概念和配置。
学习和理解建议:咋一看,若隐若现,再回眸,两不相识,重逢时,原是弹丸之丘!
推荐
Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念 下
Koi技术教程-Tauri-第二章 Tauri的业务架构
Koi技术教程-Tauri-第三章 Tauri的搭建环境
一. 概述
Tauri的核心概念是开发人员利用Tauri进行编程的核心,了解Tauri的核心概念不仅有助于我们更好的理解它的运行原理,也为我们在实际的业务开发中使用它提供支持。它的核心概念体系包含一下五个部分:
- architecture 结构
- process Model 流程模块处理
- app size
- IPC
- security
官方文档:https://tauri.app/concept/
二. Architecture 结构
本章节我们将了解到Tauri的结构及生态系统。
Tauri 是一个多语言的通用工具包,它使得我们借助rust及webview来构建计算机程序,它使用“wry”和“tao”来完成对操作系统进行系统调用的繁重工作,通过 js api和rust api来制作 WebView OS应用程序。
1. Tauri 架构图
此图来自官方文档。
由图中内容,可以看到Tauri由2大内容组成“upstream crates” 和 “core ecosystem” 构成。下面我们来了解下它们的具体内容。
1. updtream crates
Tauri 应用的 updtream crates 主要包含2个组成部分,Tao 和 wry
- TAO: 用于创建和管理应用窗体。它是RUST中跨平应用程序窗口的创建库,支持:Windows、macOS、Linux、iOS 和 Android,是winit的一个分支,在tauri中进行了扩展,增加了菜单和系统托盘。
- wry:作为接口,用于链接 webview和窗体;wry是Rust中的跨平台WebView渲染库,支持所有主流桌面平台,例如 Windows、macOS 和 Linux。Tauri 使用 WRY 作为抽象层,负责确定使用哪个 WebView(以及如何进行交互)。抹平平台差异,暴露统一的上层 API。
2. core ecosystem
core 是Tauri的核心内容,它包含6个内容,分别如下:
- tauri-runtime 它负责与较低级别的webview库之间交互的粘合层。
- tauri-macros 将 upstream crate 作为上下文,处理程序和铃木创建宏 tauri-codegen
- tauri-utils 提供通用的工具,如:解析配置文件、检测平台三元组、注入 CSP 和管理资产等
- tauri-runtime-wry 与wry通过接口直接进行系统级交互,例如打印、监视器检测和其他与窗口相关的任务
- tauri-codegen 负责创建应用内容,如:应用程序图标以及系统托盘,
tauri.conf.json
在编译时解析并生成 Config 结构。 - tauri-build 应用构建
其中 tauri-runtime、tauri-macros、tauri-utils 构成了 tauri。
tauri 是将所有的内容最后那个何在一起的主要包。它将运行时、宏、实用程序和 API 整合到一个最终产品中。它tauri.conf.json
在编译时读取文件以引入功能并进行应用程序的实际配置,它在运行时处理脚本注入(用于 polyfill/原型修订),托管用于系统交互的 API,甚至管理更新过程。
3. 常用的工具库和插件
工具库
- api(javascript/typescript) 创建
cjs
或者esm
端点供您导入到前端框架中,以便 Webview 可以调用和监听后端活动。 - bundler(rust/shelle) 构建 Tauri 应用的库。目前支持 macOS、Windows 和 Linux 等
- cli.rs(rust) Rust 可执行文件提供了 CLI 所需的所有必要活动的完整接口。
- cli.js(javascript) 生成 npm 包的包装器
- create-tauri-app(javascript) 创建应用
插件库:
- tauri-action
- tauri-vscode
- vue-cli-plugin-tauri
4. 插件
Tauri 插件指南,这是重点,后续会专门说明
一般来说,插件是由第三方编写的(尽管可能有官方支持的插件)。插件通常做三件事:
- 使 Rust 代码能够做“某事”。
- 提供接口粘合剂,使其易于集成到应用程序中。
- 提供用于与 Rust 代码交互的 JavaScript API。
三. Process Model 流程模型
1. 流程概述
在 GUI 应用程序的早期,通常使用单个进程来执行计算、绘制界面并对用户输入做出反应。往往一个应用程序组件的故障会导致整个应用程序崩溃。多进程模型的设计使得应用程序在不同的进程中运行不同的组件。这可以更好地利用现代多核 CPU,并创建更安全的应用程序。一个组件的崩溃不再影响整个系统,因为组件被隔离在不同的进程中。如果某个进程进入无效状态,我们可以轻松地重新启动它。
另外,我们可以使用最小特权原则,来为每个进程分配最少的执行权限(刚好够它们完成工作)来限制潜在漏洞的影响范围。
2. 核心流程
此图来自官网
- Tauri 应用程序都有一个核心进程,它充当应用程序的入口点,也是唯一可以完全访问操作系统的组件。
- 主要职责是使用该访问权限来创建和编排应用程序窗口、系统托盘菜单或通知。它还通过核心进程管理所有进程间通信,让您可以在一个中心位置拦截、过滤和操作 IPC 消息。
- 核心进程还应负责管理全局状态,例如设置或数据库连接。这使您可以轻松地在窗口之间同步状态,并保护您的业务敏感数据不被前端窥探。
3. WebView 进程
核心进程本身并不渲染实际的用户界面 (UI);它会启动 WebView 进程,利用操作系统提供的 WebView 库。WebView 是一个类似于浏览器的环境,可执行 HTML、CSS 和 JavaScript。
目前,Tauri 在 Windows 上使用Microsoft Edge WebView2,在macOS 上使用WKWebView ,在 Linux 上使用webkitgtk。↩
4. 应用启动后的进程
四. App size
您可以通过修改或者引入依赖库的方式调整您的应用程序的二进制文件大小,如:cargo.toml 中
[profile.dev]
incremental = true # Compile your binary in smaller steps.
[profile.release]
codegen-units = 1 # Allows LLVM to perform better optimization.
lto = true # Enables link-time-optimizations.
opt-level = "s" # Prioritizes small binary size. Use `3` if you prefer speed.
panic = "abort" # Higher performance by disabling panic handlers.
strip = true # Ensures debug symbols are removed.
以下是一些常用到的配置参考:
-
incremental: 以较小的步骤编译二进制文件.
-
codegen-units:以编译时优化为代价来加快编译时间。
-
lto:启用链接时间优化。
-
opt-level:确定编译器的重点。用于
3
优化性能、z
优化大小以及s
介于两者之间的某些方面。 -
panic: 通过消除恐慌来减少尺寸。
-
strip:从二进制文件中去除符号或调试信息。
-
rpath:通过将信息硬编码到二进制文件中来帮助查找二进制文件所需的动态库。
-
trim-paths:从二进制文件中删除潜在的特权信息。
-
rustflags:
根据每个配置文件设置 Rust 编译器标志。
-Cdebuginfo=0
:是否应在构建中包含调试信息符号。-Zthreads=8
:增加编译期间使用的线程数量。
接读:Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念 下