"你日渐平庸,甘于平庸,将继续平庸。"------《以自己喜欢的方式过一生》
"总是有人要赢的,那为什么不能是我呢?"------科比·布莱恩特
"你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,人世间没有任何理想值得以这样的沉沦作为代价。"------马尔克斯《百年孤独》
"如果结果不如你所愿,就在尘埃落定前奋力一搏。"------《夏目友人帐》
"有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。"------《十宗罪》
"维持现状意味着空耗你的努力和生命。"------纪伯伦
Tauri技术教程 * 第一章 Tauri简介
一. 摘要
在开始学习 Tauri 这门编程技术之前,有必要做一些了解,首先 Tauri 是用于构建 CS 端(windows、macos、linux、ios、安卓)的技术框架,它使用 webview 技术,展示端页面采用 JS 技术(vue、react)等。服务端的构建取决于你所构建的系统应用(纯单机版及服务端版本)。在开始学习之前你需要具备以下基础知识:
- VUE 或者 react 技术,本文以当下使用广泛的 VUE3 为例子;
- 习惯了 typescript,可适当了解
- 基本的 RUST 语法知识,会一门编程语言即可;
- 良好的坚持力和不断学习的态度。
接下来让我们从基础的内容开始。
二. 简介
技术框架的学习往往从是什么开始,了解它的介绍是我们迈出的第一步。
1. 官方的简介
Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架,同时可以在必要时使用 Rust、Swift 和 Kotlin 等语言编写后端逻辑。--Tauri2.0
Tauri 是一个应用程序构建工具包,它允许您使用 web 技术为所有主要的桌面操作系统构建软件。核心库是在 Rust 中为您编写的,用户界面几乎可以使用任何前端框架编写。它包括一个可选的、可树共享的 JavaScript API,用于舒适的低级系统访问,一个带有代码签名和工件验证的桌面二进制捆绑器,一个安全的更新程序,用于让您的用户使用最新版本,一个广泛的插件系统,以及对操作系统级集成(如通知和应用程序托盘)的支持。-Tauri1.0
2. 百度文库
Tauri 是一个开源框架,旨在帮助开发者使用 Web 技术构建小型、快速和安全的跨平台桌面应用。它使用 Rust 作为后端,结合现代 Web 技术(如 HTML、CSS 和 JavaScript)作为前端,提供了一种独特的方法来创建跨平台桌面应用
通过对上述概念的理解,基本可以概述为:为 WEB 开发人员进行桌面开发的解决方案,他真的需要 rust 的编程吗?不会 RUST 可以吗?
3. 当前的版本
当前 Tauri 的最新版本为 2.X, 历史版本:Tauri2.0
4. Tauri 哲学
哲学是个好东西,它可以丰富我们的大脑,指导我们一心向前,解决困惑,了解前向的方向和目的。 -修行者
Tauri 是一个工具包,可以帮助开发人员为主要的桌面平台制作应用程序------几乎可以使用任何现有的前端框架。核心是用 Rust 构建的,CLI 利用 Node.js 使 Tauri 成为一个真正的多语言方法来创建和维护伟大的应用程序。
1. 安全优先
在当今世界,每个真实的威胁模型都假设用户的设备已经被入侵。这让应用程序开发人员陷入了一个复杂的境地,因为如果设备已经处于危险之中,如何能让软件可信呢?
我们采取的是纵深防御。我们希望你能采取一切可能的预防措施来减少你面对攻击者的表面积。Tauri 允许你选择要发布的 API 端点,无论你是否希望在应用中内置本地主机服务器,它甚至可以在运行时随机化功能句柄。这些技术和其他技术构成了增强您和您的用户能力的安全基线。
通过使静态攻击变得极其困难和将系统彼此隔离来减慢攻击者的速度是游戏的名称。如果您来自电子生态系统,请放心,默认情况下 Tauri 只提供二进制文件,而不是 ASAR 文件。
通过选择以安全作为指导力量来构建 Tauri,我们为您提供了采取主动安全姿态的每一个机会。
2. Polyglots, not Silos
大多数当代框架使用单一语言范式,因此被困在知识和惯用法的泡沫中。这可以很好地适用于某些利基应用程序,但它也培养了一种部落主义。
这可以从 React、Angular 和 Vue 开发社区挤在一起的方式中看出,最终很少产生交叉影响。
同样的情况可以在 Rust、Node 和 c++ 的战场上看到,强硬派立场鲜明,拒绝跨社区合作。
今天,Tauri 使用 Rust 作为后端,但在不久的将来,其他后端,如 Go、Nim、Python、Csharp 等将成为可能。这是因为我们正在维护官方的 Rust 绑定到 webview 组织,并计划让你根据自己的需要切换后端。由于我们的 API 可以使用 C interop 以任何语言实现,因此完全符合规范只需要一个 PR。
三. 官网入口
版本一:Tauri1.0
版本二:Tauri2.0
为啥这里要了解 2 个版本的文档?因为啊,Tauri2.0 的文档不全面,要结合这 Tauri1.0 的文档看,这意味着什么? 大炕(需要试错,并解决错误)
四. 历史发展
- Tauri 1.0:于 2022 年 6 月发布,对桌面操作系统市场以及如何构建跨平台应用程序产生了重大影响
- Tauri 2.0 Alpha:于 2022 年底发布,主要用于获取初步反馈和测试移动交互的定义
- Tauri 2.0 Beta:于 2024 年 2 月发布,经过近两年的优化和架构调整
- Tauri 2.0 稳定版 :最终于 2024 年 10 月发布,引入了一系列新功能和改进措施,特别强调了用户体验的提升
功能和特性
-
跨平台支持 :Tauri 支持所有主流桌面平台(macOS、Linux、Windows)和移动设备平台(iOS、Android),允许开发者使用熟悉的 Web 技术栈编写前端页面,并通过 Rust、Swift 和 Kotlin 等语言处理后端逻辑或性能密集型任务
-
轻量级和性能 :与体积庞大的 Electron 相比,Tauri 更轻量、性能更好,提供了一种更现代、更安全且资源效率更高的方法来构建跨平台应用
-
新特性 :Tauri 2.0 引入了创建项目骨架的命令行工具、热模块替换(HMR)技术、增强的第三方插件支持以及对 iOS 和 Android 的完整支持
五. 现状
在了解它的现状之前,我们先了解下当前跨端跨平台的优秀技术方案:
-
移动端:React Native,Flutter,Weex;
-
小程序端:Taro,Uniapp;
-
桌面端:NW.js,Electron,Flutter for desktop,Tauri,Wails QT。
别告诉我你对跨平台不理解:
cpu 有不同的架构和指令集,上层也有不同的操作系统,一个系统的可执行文件在另一个系统上就是不可执行的,比如 windows 的 exe
文件在 mac 上就不能直接执行。不同的系统就是不同的运行平台。可执行文件是不跨平台的。
不同平台提供的 api 不同,所以代码逻辑可能也不同,需要不同平台单独维护代码。这样就带来了几个问题:
多平台各自开发,怎么保证功能是一致的
多平台各自开发,那是不是得各自测试,开发和测试的人力都是多份的
所以出现了跨平台的一些技术,目标是一份代码跑在任意平台。
1. 说明
在国内的企业应用来看,但凡有能力的厂商大都采用 C 技术来构建桌面应用,当然 QT 是比较易施的方案之一,在行业从业者角度来看,大多数的软件开发者基本上都是从事 JAVA 的软件开发(go,python 别拉仇恨)方面工作的。而这一领域的开发者基本上大多是了解 WEB 技术的,比如:VUE、REACT(这里的了解是会用,不是精通)。那么在此技术环境上做 CS 端的开发,从成本(技术、投入)来看 Electron(flutter 也可行?国内使用的不广泛)是个很不错的选择,而大多数使用 electron 开发的软件和系统基本都是:vue+egg+springboot (懂的都懂,egg 为 electron 的一个快速开发框架)。利用浏览器技术。
而 Tauri 也是在此基础上提出,它和 electron 的开发抉择就成了当下比较热门的话题:
2. Electron 介绍
Electron 是一个使用 JavaScript、HTML 和 CSS 等 Web 技术创建原生应用程序的框架。它负责处理困难的部分,因此您可以专注于应用程序的核心。
可使用纯前端技术来编写应用,硬件服务的操作通过 SOCKET,http,动态库的方式进行。
Electron 的前身叫做 Atom-Shell, 最初由 GitHub 开发,它依赖于几个关键的网络浏览器项目:Chromium(Google Chrome 和 Microsoft Edge 的基础)以及 Node.js(和 Google V8)JavaScript 运行时。Electron 项目将相当于一个由 Chromium 驱动的便携式网络浏览器实例与应用程序代码重新打包在一起。当应用程序启动时,它会启动浏览器,进而加载与之捆绑的基于 JavaScript 的应用程序。
Visual Studio Code 为例,这是一个流行的 Electron 应用程序。所有视觉元素和交互性都由一个独立的浏览器组件提供,该组件还负责处理与整个系统的交互。
3. 选择问题
Tauri 就目前生态来看,还不如 Election,但其的反战潜力是比较大的,他比较适用于对性能要求较高、安全需求严格的项目,(这往往是关键)。Electron 更适合需要快速开发、对用户界面定制性要求高的项目,
3. 看下比较点(来自网络)
类目 | Tauri | Electron |
---|---|---|
技术栈 | 基于 Rust 和 WebView。 使用 HTML、CSS 和 JavaScript 构建用户界面,但底层逻辑用 Rust 实现。 利用系统自带的 WebView,不捆绑完整的浏览器实例。 | 基于 Node.js 和 Chromium。 使用 HTML、CSS 和 JavaScript 构建用户界面。 由于 Chromium 的存在,应用会捆绑一个完整的浏览器实例。 |
性能 | 利用系统自带的 WebView,启动时间和内存占用更低。 安装包更小,通常只有几 MB。 | 由于捆绑了 Chromium,启动时间和内存占用较高。 通常较重,应用安装包尺寸较大。 |
资源使用 | 更低的内存和 CPU 使用率。 依赖系统的 WebView,资源消耗较小。 | 更高的内存和 CPU 使用率。 每个应用都包含一个 Chromium 实例,导致资源消耗较大。 |
开发体验 | Rust 的学习曲线较陡峭,但性能和安全性更高。 生态系统还在快速发展中,插件和库相对较少。 对于需要低资源占用和高性能的应用更有吸引力。 | 成熟的生态系统,丰富的插件和第三方库支持。 社区活跃,文档和教程丰富。 更适合已经熟悉 Node.js 和 web 开发的开发者。 |
生态系统 | 生态系统相对较新,但增长迅速。 Rust 社区的支持。 | 大量的社区支持和第三方库。 被广泛使用,包括 Slack、Visual Studio Code、Atom 等流行应用。 |
安全性 | 使用 Rust 编写的后端,内存安全和并发处理更好。 更加注重安全性设计。 | 由于使用 Node.js,可能面临一定的安全风险,需要小心管理依赖和更新。 |
场景 | 适合需要快速开发和部署的应用。 对于开发团队已经熟悉的 JavaScript 技术栈,进入门槛较低。 | 适合需要快速开发和部署的应用。 对于开发团队已经熟悉的 JavaScript 技术栈,进入门槛较低。 |