当前位置: 首页 > news >正文

Tauri教程-基础篇-第二节 Tauri的核心概念上篇

请添加图片描述

“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
“有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
“维持现状意味着空耗你的努力和生命。”——纪伯伦

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 插件指南,这是重点,后续会专门说明

一般来说,插件是由第三方编写的(尽管可能有官方支持的插件)。插件通常做三件事:

  1. 使 Rust 代码能够做“某事”。
  2. 提供接口粘合剂,使其易于集成到应用程序中。
  3. 提供用于与 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的核心概念 下

相关文章:

Tauri教程-基础篇-第二节 Tauri的核心概念上篇

“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...

大风车excel:怎么把题库导入excel?题库导入excel

高效管理试题库:如何批量导入试题到 Excel? 在教育培训、学校管理以及在线学习平台中,试题库的管理是核心工作之一。如何快速、准确地将试题导入到 Excel 表格中,成为许多教育工作者和开发者的迫切需求。本文将围绕“题库导入 Ex…...

Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息

在Java开发中,处理Excel文件中的图片(包括浮动图片和嵌入图片)是一个常见的需求。本文将介绍如何使用EasyExcel和Apache POI库来读取Excel文件中的图片,并将其与数据进行关联。 1. 引言 在许多应用场景中,Excel文件不…...

电脑硬盘系统迁移及问题处理

一、系统迁移准备 1、确认你的电脑主板是否支持安装两块硬盘,如电脑主板有多个M2硬盘接口,我们将新硬盘安装到主板上,原来的老硬盘安装在第二个接口上,主板只有一个M2接口的话可以使用移动硬盘盒。 2、新硬盘安装好后,我们进入原来的系统,在 此电脑–右键–管理–磁盘管…...

网关 + Nacos配置管理

网关 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 网关路由 新建网关模块gateway引入相关依赖 <!--网关--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…...

《Spring Framework实战》6:核心技术 4.1.IoC 容器

欢迎观看《Spring Framework实战》视频教程 本章介绍 Spring 的控制反转 &#xff08;IoC&#xff09; 容器。 本部分摘要 Spring IoC 容器和 Bean 简介 容器概述 Bean 概述 依赖 Bean 作用域 自定义 Bean 的性质 Bean 定义继承 容器扩展点 基于注解的容器配置 Clas…...

ModuleNotFoundError: No module named ‘audioop‘

问题 ModuleNotFoundError: No module named pyaudioop ModuleNotFoundError: No module named audioop解决方案 安装库 pip3 install audioop-lts...

STM32-笔记38-I2C-oled实验

一、什么是I2C&#xff1f; I2C总线&#xff0c;全称Inter-Integrated Circuit&#xff08;互连集成电路&#xff09;&#xff0c;是一种由Philips&#xff08;现NXP半导体&#xff09;公司在1980年代初开发的同步 串行 半双工通信总线。 二、有了串口通信为什么要使用I2C&…...

人大金仓实现主键自增.

使用数据库中自带的参数类型 serial 类型(相当于创建一个INT列), 或者bigserial(相当于创建一个BIGINT列. 示例sql: CREATE TABLE ord(id SERIAL,ord_no INT NOT NULL,ord_name VARCHAR(32),CONSTRAINT "ord_PKEY" PRIMARY KEY ("id"));插入时指定自增值…...

h264之多视点mvc编码及解码过程(JMVC平台举例)

h264标准参考平台JMVC是针对MVC标准的&#xff0c;JMVC支持多视点编码、合流、多视点解码操作。可以利用JMVC生成h264 mvc码流和解码。 JMVC的下载地址是&#xff1a;jvet / JMVC GitLabH.264/AVC multi-view coding (MVC) extension JMVC reference softwarehttps://vcgit.hh…...

小程序学习08—— 系统参数获取和navBar组件样式动态设置

一 系统信息的概念 uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息。 success 返回参数说明&#xff1a; 参数分类说明statusBarHeight手机状态栏的高度system操作系统名称及版本。。。 二 自定义navbar 2.1 获取系统参数 代码展示…...

数据库环境安装(day1)

网址&#xff1a;MySQL 下载&#xff08;环境准备&#xff09;&#xff1a; &#xff08;2-5点击此处&#xff0c;然后选择合适的版本&#xff09; 1.linux在线YUM仓库 下载/安装: wget https://repo.mysql.com//mysql84-community-release-el9-1.noarch.rpm rpm -i https://r…...

网络安全-web渗透环境搭建-BWAPP(基础篇)

01--所需系统环境&#xff1a; 虚拟主机系统部署&#xff08;vmware&#xff0c;虚拟主机创建、虚拟主机网络配置&#xff08;桥接&#xff0c;便于网络中多个主机都能访问虚拟主机&#xff09;、虚拟软件功能&#xff0c;快照、克隆、镜像文件加载&#xff0c;ova文件制作&am…...

当算法遇到线性代数(三):实对称矩阵

实对称矩阵的理论与应用 线性代数系列相关文章&#xff08;置顶&#xff09; 1.当算法遇到线性代数&#xff08;一&#xff09;&#xff1a;二次型和矩阵正定的意义 2.当算法遇到线性代数&#xff08;二&#xff09;&#xff1a;矩阵特征值的意义 3.当算法遇到线性代数&#x…...

WayLand的架构和协议

WayLand的架构和协议 1. Wayland简介 1.1 Wayland是啥&#xff1f;为啥它这么重要&#xff1f; 嘿&#xff0c;你知道吗&#xff1f;有时候咱们用电脑的时候&#xff0c;是不是觉得图形界面有点慢、有点卡&#xff1f;那是因为我们还在用一个叫X Window System (X11)的老伙计…...

STM32学习(十)

I2C模块内部结构 I2C&#xff08;Inter-Integrated Circuit&#xff09;模块是一种由Philips公司开发的二线式串行总线协议&#xff0c;用于短距离通信&#xff0c;允许多个设备共享相同的总线‌。 ‌硬件连接简单‌&#xff1a;I2C通信仅需要两条总线&#xff0c;即SCL&…...

进阶篇-Day17:JAVA的日志、枚举、类加载器、反射等介绍】

目录 1、日志1.1 日志概念1.2 日志框架&#xff08;1&#xff09; Logback框架&#xff1a;&#xff08;2&#xff09;配置文件介绍&#xff1a; 2、枚举3、类加载器3.1 类加载器的介绍3.2 类加载器的加载过程&#xff1a;加载、链接、初始化3.3 类加载器的分类3.4 双亲委派模式…...

Java设计模式 —— 【行为型模式】责任链模式(Chain-of-responsibility Pattern) 详解

文章目录 模式介绍优缺点适用场景模式结构案例实现 模式介绍 责任链模式又名职责链模式&#xff0c;它是一种对象行为的设计模式&#xff0c;为了避免请求发送者与多个请求处理者耦合在一起&#xff0c;将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链&…...

C++和Python中负数取余结果的区别

C中的负数取余规则&#xff08;取模%&#xff09;规则 在C中&#xff0c;取余运算&#xff08; % &#xff09;的结果符号与被除数相同。从数学定义角度看&#xff0c;C遵循的是尽量让商向零取整的规则。例如计算 -7/3&#xff0c;商是 -2 &#xff08;向零取整&#xff09;&a…...

rust学习——环境搭建

rust安装&#xff1a;https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html 1、vscode装插件&#xff1a; toml语法支持 依赖管理 rust语法支持 2、创建demo 3、查看目录 4、执行文件的几种方式&#xff1a; rust安装&#xff1a;https://www.rust-lang.org/z…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭&#xff01;_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...