Tauri(读音:踹你)开发简介:1.创建和运行第一个app

桌面app与web app之间的界限越来越模糊,以前可能说基于web编写的app性能不好,但是现在我们来看,不管钉钉还是vscode,都是采用了Electron框架,以web模式开发出来的。

提到Electron相信许多程序员都不陌生,它是使用JavaScript,HTML和CSS构建跨平台的桌面应用程序,可以打包为Mac、Windows、Linux系统下的应用。

你要说钉钉的使用给人感觉老是满半拍,例如要点击读取信息的时候,会有很明显的加载延迟(不但要读取数据,还要读取和编译html\js\css等资源),但是看vscode,就发现大部分情况下,已经与传统桌面的GUI开发框架相差无几了……

img

Visual Studio Code(简称“VS Code” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器, 可在桌面上运行,并且可用于Windows,macOS和Linux。

Electron虽然好用,但是却有两大致命的缺点:性能不高,内存消耗过大;包太大。特别是因发布的结果体积庞大这一点而饱受诟病,所以业界也一直在找一种轻便性能更好的框架来对他进行补充或者替代,于是Tauri 应运而生,它与Electron相比,更加轻量、性能更好,提供了一种更现代、更安全且资源效率更高的方法来构建跨平台桌面应用。

所以正好趁着Tauri发布了2.0,今天给大家简单介绍这个(四不像)神器……

首先我们先对Electron和Tauri二者进行一下对比,就会发现一些指标差距还是相当的明显:

img

可以看见,除了编译结果的大小、性能外,最大的区别就是两个,一个是Tauri支持字节码传递(bytecode delivery),及将字节码传输或交付给目标环境的过程,这样前后台之间的数据交互就省去了很多麻烦,这点后面在说。二就是Electron无法获得 FLOSS(自由/开源软件) 许可的,这样也给一些商用软件或者想开源的软件带来一些麻烦。

当然,进行架构选项是系统架构师的基本功,说了优点,自然也说说缺点,Tauri也有自己的一些缺点,如下:

  1. Tauri调用的是系统内置的webview,WebView是WebKit框架中的核心视图类,用于管理WebFrame和WebFrameView类之间的交互。实际上你可以把这个东西看成是系统内置的一个浏览器对象。

    • 首先WebView这个玩意儿比较新,虽然在新的windows、linux、macos、ios、android的新一代系统里面都自带了,但是如果遇上了老系统,例如windows 7 那么就凉凉了。

    • 其次不同的系统的WebView在某些地方也有一些细微的差别,例如你开发的系统在windows上没问题,放MACOS上,样式就出错,就是因为不同系统的WebView版本可能有些差别导致的。

    • 第三,WebView自己也有可能遇上bug,如果真遇上了,就别想自己能换个版本啥的来进行修正了。

    反之,Electorn内嵌了一个Chromium ,这样可以最大化的避免不同系统带来的问题,如果遇上了内核bug,也可以通过升级内嵌的Chromium 来解决。

  2. Tauri后台默认使用Rust进行开发,而不像Electorn后台使用Node.js,可以使用JS/TS一门语言包打天下,会导致编写Tauri有更高的技术复杂度(招人难)。

  3. Tauri比较新,所以支持和社区都不如Electorn成熟,也没有很成功的案例。

如果你觉得这三个缺点不会对你的项目产生啥影响,那就没问题了,可以直接上手了。

下面我将用几节的时间,来简介一下Tauri的开发模式,因为虾神我是一个前端盲,所以我这里全程使用Rust模式,前端仅用HTML白板页面和最简单的js来进行简单说明,前端的专家同学们不要在意这些细节。

img

安装Rust(略)

如果是windows直接去Rust官网上下载安装包即可,如果是linux/macos,则敲一个命令就可以了,注意,好技术不如有个好网络,得有网络的情况下搞定:

rust的中文官网下载为止:

https://www.rust-lang.org/zh-CN/learn/get-started

img

安装Rust下面的Tauri工具链

我这里已经假定你已经安装好了Rust环境……

通过cargo 管理工具来安装Rust的Tauri工具链create-tauri-app,在有网络的情况下,输入如下命令即可:

cargo install create-tauri-app --locked

create-tauri-app是一个Rust编写的用于创建Tauri工程结构的工具,他可以帮你生成Tauri的工程代码框架,是一个很好用的脚手架(当然你也可以不用,手动去建设这些东西)。

创建Tauri工程

进入到你需要创建工程的目录下面,输入如下命令:

cargo create-tauri-app

然后工具会问你几个问题,你可以输入需要的基本信息(当然默认也行):

img

  1. 你的工程想叫啥名字?
  2. 你工程的唯一标识符?
  3. 你选择那种语言来进行开发?
  4. 你想选择那种UI模板来进行开发?

我这里全部默认,然后得到了如下这样一个工程目录:

img

工程结构

src 目录

这个目录下面是js/html/css所在的UI目录,可以看成web工程的目录结构。

src-tauri

这个目录是Rust的工程目录,是cargo结构的,如果在Rust下面做workspace的话,需要在根工程指向到这个目录下面。

tauri.conf.json

Tauri的配置文件,我们前面输入的那些信息都在这里,当然,你也可以修改这个文件:

img

然后我们就可以直接运行了:

cd <工程目录>
cargo tauri dev

cargo会从cartes.io上拉所有需要的包,然后在本地编译,稍微需要有一些时间,编译完成之后会自动打开和启动app了:

img

img

这个页面实际上就是一个网页,我们点击右键就可以看见html的源码以及可以进行前端调试:

img

好了,今天到此为止,下一篇我们讲一下Tauri的开发模式。

Tauri 中,`App::handle`、`tauri::Builder::default()` `tauri::WindowBuilder::new` 是三个重要的 API,它们分别用于处理应用程序的事件、构建 Tauri 应用程序创建窗口。 ### App::handle `App::handle` 方法用于处理 Tauri 应用程序的事件。Tauri 是一个基于 Rust Web 技术栈的框架,运行在基于 Chromium 内核的 WebView 中。`App::handle` 方法会监听应用程序的事件,例如启动、关闭、最小化、最大化等,并且可以根据这些事件来执行相应的操作。 以下是一个简单的示例,使用 `App::handle` 方法监听应用程序的启动事件,并在启动时打印一条消息: ```rust fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![my_custom_handler]) .run(tauri::generate_context!()) .expect("failed to run app"); } #[tauri::command] fn my_custom_handler() { println!("My Tauri app has started!"); } ``` ### tauri::Builder::default() `tauri::Builder::default()` 方法用于构建 Tauri 应用程序。在构建 Tauri 应用程序时,可以定义应用程序的窗口、菜单、打印机、文件选择器等属性。使用 `tauri::Builder::default()` 方法可以获取一个默认的构建器实例,你可以在此基础上进行进一步的配置。 以下是一个简单的示例,使用 `tauri::Builder::default()` 方法构建一个窗口: ```rust fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![my_custom_handler]) .run(tauri::generate_context!()) .expect("failed to run app"); } #[tauri::command] fn my_custom_handler() { let window = tauri::WindowBuilder::new() .title("My Tauri App") .build() .unwrap(); window.show().unwrap(); } ``` ### tauri::WindowBuilder::new `tauri::WindowBuilder::new` 方法用于创建窗口。在创建窗口时,可以定义窗口的标题、大小、位置、图标等属性。使用 `tauri::WindowBuilder::new` 方法可以获取一个默认的窗口构建器实例,你可以在此基础上进行进一步的配置。 以下是一个简单的示例,使用 `tauri::WindowBuilder::new` 方法创建一个窗口: ```rust fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![my_custom_handler]) .run(tauri::generate_context!()) .expect("failed to run app"); } #[tauri::command] fn my_custom_handler() { let window = tauri::WindowBuilder::new() .title("My Tauri App") .width(800) .height(600) .build() .unwrap(); window.show().unwrap(); } ``` 以上三个 API 是 Tauri 应用程序开发中的重要组成部分,通过它们可以构建 Tauri 应用程序,并且对应用程序的事件进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾神说D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值