Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念上

1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》
2. “总是有人要赢的,那为什么不能是我呢?”——科比·布莱恩特
3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,人世间没有任何理想值得以这样的沉沦作为代价。”——马尔克斯《百年孤独》
4. “如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
5. “人有逆天之时,天无绝人之路。”——《醒世恒言》
6. “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
7. “维持现状意味着空耗你的努力和生命。”——纪伯伦
第二节 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的核心概念 下
相关文章:
Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念上
1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…...
入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网…...
vulnhub靶场【DC系列】之5
前言 靶机:DC-5,IP地址为192.168.10.4 攻击:kali,IP地址为192.168.10.2 都采用VMWare,网卡为桥接模式 对于文章中涉及到的靶场以及工具,我放置网盘中https://pan.quark.cn/s/2fcf53ade985 主机发现 使用…...
前端面试题合集
1.有哪些方式可以实现数据的实时更新? 一. AJAX轮询(Polling) 轮询是一种通过定时发送HTTP请求到服务器来检查数据更新的方法。客户端每隔一定时间(如每5秒)发送一个请求到服务器,服务器响应当前的数据状态…...
基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS
产品设计初衷 HS-P2-2D是一款针对大车盲区开发的360度全景影像 安全行车辅助系统,通过车身四周安装的超广角像机,经算法合成全景鸟瞰图,通过鸟瞰图,司机非常清楚的看清楚车辆四周情况,大大降低盲区引发的交通事故。 产…...
基于 GEE Sentinel-1 数据集提取水体
目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一,对于多个领域都具有重要的应用价值。它有助于更好地管理水资源,保护环境,减少灾害风险,促进可持续发展,以…...
Python判断、循环练习
01 02 03...
【简博士统计学习方法】第1章:4. 模型的评估与选择
4. 模型的评估与选择 4.1 训练误差与测试误差 假如存在样本容量为 N N N的训练集,将训练集送入学习系统可以训练学习得到一个模型,我们将这么模型用决策函数的形式表达,也就是 y f ^ ( x ) y\hat{f}(x) yf^(x),关于模型的拟合…...
解密Navicat密码(Java)
最近从Navicat换到了DBeaver,导出配置文件发现配置文件里的密码都是加密的,看网上的都是给的PHP代码,因为环境问题,就算是在线上运行的PHP代码也会报错,所以就把这段代码改成Java了。 package com.unicdata.system.con…...
某聘__zp_stoken__参数逆向还原
声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuemhpcGluLmNvbS93ZWIvZ2Vlay9qb2I/cXVlcnk9cHl0aG9uJm…...
【数据可视化-11】全国大学数据可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
声音是如何产生的
一、音频概述 RTMP中一般音频采用aac编码,采样率为44100HZ, 每帧1024采样,帧率43,23.2ms一帧 RTC中一般音频采用opus编码,采样率为48000HZ,每帧480采样,帧率100,10ms一帧 通道数(c…...
梯度下降方法
2.5 梯度下降方法介绍 学习目标 掌握梯度下降法的推导过程知道全梯度下降算法的原理知道随机梯度下降算法的原理知道随机平均梯度下降算法的原理知道小批量梯度下降算法的原理 上一节中给大家介绍了最基本的梯度下降法实现流程,本节我们将进一步介绍梯度下降法的详细…...
web3与AI结合-Sahara AI 项目介绍
背景介绍 Sahara AI 于 2023 年创立,是一个 "区块链AI" 领域的项目。其项目愿景是,利用区块链和隐私技术将现有的 AI 商业模式去中心化,打造公平、透明、低门槛的 “协作 AI 经济” 体系,旨在重构新的利益分配机制以及…...
Nginx——反向代理(三/五)
目录 1.Nginx 反向代理1.1.Nginx 反向代理概述1.2.Nginx 反向代理的配置语法1.2.1.proxy_pass1.2.2.proxy_set_header1.2.3.proxy_redirect 1.3.Nginx 反向代理实战1.4.Nginx 的安全控制1.4.1.如何使用 SSL 对流量进行加密1.4.2.Nginx 添加 SSL 的支持1.4.3.Nginx 的 SSL 相关指…...
环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
《港湾商业观察》施子夫 2024年12月18日,浙江环动机器人关节科技股份有限公司(以下简称,环动科技)的上市审核状态变更为“已问询”,公司在11月25日科创板IPO获上交所受理,独家保荐机构为广发证券。 此次环…...
源网荷储:构建智慧能源生态的关键方案设计
一、技术融合基石 多元能源采集技术:在 “源” 端,除了常见的光伏、风电、火电,生物质能发电、地热能利用技术也应纳入考量。例如在有丰富生物质原料的农村地区,小型生物质发电厂可实现废物利用与供电双赢;地热资源丰…...
进程间通讯
简介: 进程间通讯方式有: 1.内存映射(mmap): 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字(socket) 5.信号机制 通过进程中kill函数,去给另一个函数发送信号&a…...
STM32-笔记33-OLED实验
实验目的 驱动 OLED 屏幕,显示点、线、字符、字符串、汉字、图片等内容。 项目实现-OLED通讯协议 复制项目文件19-串口打印功能 重命名为47-OLED实验 打开项目文件 加载文件 代码书写顺序: oled.c #include "oled.h"//初始化oled的gpio …...
低空管控技术-无人机云监视技术详解!
一、无人机监听技术的原理 无人机监听技术主要依赖于射频(RF)探测、光学和红外传感器等技术手段。这些技术通过被动监听和监测无人机与飞行员(或控制器)之间的通信链路传输,以确定无人机的位置,甚至在某些…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
