Tauri 开发实践— Tauri 怎么样

简介: Tauri 是一个用于构建高效、小型二进制文件的框架,适用于所有主流桌面及移动平台。开发人员可以利用任何可编译为 HTML、JavaScript 和 CSS 的前端框架构建应用,并借助 Rust、Swift 或 Kotlin 进行后端开发。Tauri 采用三层架构,包括 tauri-app、WRY(跨平台 Webview 库)和 TAO(跨平台窗口管理器)。相较于 Electron,Tauri 使用系统内置浏览器引擎执行 Web APP,具有更小的资源占用和更高性能。详情见:[Tauri 官网](https://tauri.app/)。

本文首发微信公众号:前端徐徐。

Tarui是什么

Tauri 是一个用于构建针对所有主要桌面和移动平台的小型、高速二进制文件的框架。开发人员可以集成任何能编译为 HTML、JavaScript 和 CSS 的前端框架来构建用户体验,同时在需要时利用诸如 Rust、Swift 和 Kotlin 等语言进行后端逻辑开发。

官网: https://tauri.app

Tarui架构

Tauri 的整体架构,自顶向下可以分为三层:

  1. tauri-app:整合所有模块,读取项目配置,完成最终 APP 产物的打包;主要负责初始化 Web APP 与底层系统 API 的通信环境,注入全局 API,管理应用更新等。
  2. WRY:一个跨平台 Webview 渲染库,会根据各平台选择特定的浏览器引擎启动 Webview,抹平平台差异,暴露统一的上层 API。
  3. TAO:跨平台应用窗口管理器,主要用于构建各平台下的应用主窗口。

Tauri 除了完全使用 rust 开发以外,与 electron 最大的不同之处就在于,没有使用直接为每个应用单独集成一个 chromium 环境,而是直接使用操作系统内置的浏览器引擎执行 Web APP,也就是这里提到的:WRY。

操作系统

浏览器引擎

说明

macOS

webkit

系统内置,理论上表现最好的平台

Linux

WebKitGTK

gtk + webkit

Windows

WebView2

从win7起,内置edge chromium中的浏览器引擎

参考:https://tauri.app/v1/references/architecture/

Tauri可以做什么

基于其优秀的性能和可靠的安全性,Tauri可以用于构建各种类型的桌面应用程序,包括但不限于:

  • 本地化工具:如IDE、代码编辑器、文件管理器等。
  • 多媒体应用:如音乐播放器、视频播放器、流媒体客户端等。
  • 游戏和娱乐应用:如小游戏、电子书阅读器等。
  • 办公和生产力工具:如文字处理器、电子表格、任务管理器等。
  • 系统工具和实用程序:如系统监视器、备份工具、系统清理工具等。

跨端桌面端框架对比

这里我们只比较跨端桌面端框架,因为原生的桌面端开发和这些框架在一个纬度上没有什么可比性。差不多有Tauri,Electron,Flutter,React Native,QT这些框架, 我们将从性能,用户界面,原生集成,社区生态,成功案例,开发经验,开发挑战这些方面去比较。

性能

  • Tauri:作为一个基于WebView的轻量级框架,Tauri的资源占用极小,能够构建快速、高响应的桌面应用程序。它的性能表现远好于基于Chromium的Electron。
  • Electron:因使用了完整的Chromium浏览器渲染进程,Electron应用通常占用较高的内存和CPU资源,在较低配置的设备上可能会表现不佳。
  • Flutter:Flutter的性能值得称赞,它使用了Ahead-of-Time(AOT)和Just-In-Time(JIT)编译技术,能够提供流畅的60fps的UI渲染和快速的启动时间。
  • React Native:React Native桌面应用的性能通常可以达到中等水平,但在保证跨平台一致性的同时,可能需要一些性能优化工作。
  • Qt:作为一个成熟的本地框架,Qt能够提供接近原生应用的卓越性能表现,非常适合开发资源密集型的应用程序。

用户界面

  • Tauri:前端使用Web技术开发,UI体验类似现代Web应用,后端可渲染原生UI控件。
  • Electron:基于Chromium浏览器内核渲染,Electron应用的UI通常不同于原生应用,但提供了强大的Web技术支持。
  • Flutter:Flutter拥有自身的modern、流畹的设计语言和丰富的widget库,为跨平台提供了一致的视觉体验。
  • React Native:使用了与React相似的组件架构,支持平滑的动画和触摸手势,但需要额外的工作来实现原生体验。
  • Qt:作为原生框架,Qt能带来接近本地的UI体验,提供大量的UI控件和动画支持。

原生集成

  • Tauri:利用Rust语言天生的系统编程特性,Tauri后端可以直接访问操作系统API和硬件资源。
  • Electron:通过Node.js的原生模块和一些第三方库,可以实现对系统API和硬件的集成。
  • Flutter:Flutter有自身的平台通道接口,可以调用原生代码并实现硬件和系统功能集成。
  • React Native:通过内置的桥接机制,可以调用底层平台的原生API和SDK。
  • Qt:作为本地框架,Qt可以完全利用平台的原生功能和硬件支持。

社区生态

  • Tauri:作为新兴框架,Tauri的社区较小但非常活跃,正在快速发展壮大。
  • Electron:基于Node.js和Chromium,拥有活跃的开发者社区和大量的第三方库支持。
  • React Native:Facebook主导的项目,拥有庞大的社区和大量教程文档支持。
  • Flutter:Google全力推动的开源项目,社区生态日益繁荣,拥有丰富的插件和学习资源。
  • Qt:作为成熟的框架,Qt拥有完备的文档和培训资源,拥有可观的应用案例。

成功案例

  • Tauri:虽然较新,但已有多个知名项目基于Tauri,如Blink Shell、Lyo IM等。可参考:https://github.com/tauri-apps/awesome-tauri
  • Electron:VSCode、Slack、WhatsApp等知名桌面应用均基于Electron构建。可参考:https://www.electronjs.org/apps
  • React Native:Facebook、Instagram、Ubereats等大型应用都采用了React Native。
  • Flutter:Google自家多款应用使用Flutter开发,如Google Assistant、Google Stadia等。
  • Qt:广泛应用于多媒体、工业控制、电子书等多个领域。

开发经验

  • Tauri:前端使用Web框架,后端使用Rust语言,两者通过IPC通信。
  • Electron:基于Web技术,前端使用HTML/JS/CSS,后端使用Node.js。
  • React Native:类React编程范式,JSX语法,可重用React Web代码。
  • Flutter:使用Dart语言开发,采用声明式编程风格编写UI。
  • Qt:使用C++或QML(类JavaScript)语言,提供完整的IDE和工具链支持。

开发挑战

  • Tauri:社区生态相对较新是当前的一个挑战,与更成熟的选项相比,Tauri 可能拥有较小的社区和较少的第三方库。
  • Electron:提升性能、内存和包大小优化是常见挑战。
  • React Native:管理原生依赖,实现跨平台高性能是较大挑战。
  • Flutter:实现高度自定义和不同操作系统之间一致性需要额外工作。
  • Qt:相对陡峭的学习曲线,深度整合系统功能复杂度较高。

总体比较

比较总结,1打10分为每项比较项打分,分越高代表此项越好,这些分数是基于上面的对比和分析打出的主观评分,可以作为参考,但不是绝对评判。不同项目和团队对于框架的需求可能有所不同,需要结合具体情况权衡利弊。

框架

性能

用户界面

原生集成

社区生态

成功案例

开发经验

开发挑战

Tauri

9

8

9

7

7

8

7

Electron

5

8

6

9

9

9

8

React Native

6

7

7

9

9

8

7

Flutter

8

8

7

8

7

7

7

Qt

9

9

10

6

8

6

5

总结

Tauri是一个全新的桌面端框架,它采用了一种独特的三层架构,将Web前端与Rust后端相结合。相比传统的桌面应用程序框架,Tauri具有更小的二进制文件大小(仅7.5MB)、更高的性能(CPU使用率仅为14.5%)、更好的安全性(严格的沙箱机制)和更好的与操作系统API的集成能力。

凭借其卓越的性能表现和可靠的安全性,Tauri为开发者提供了一种全新的构建桌面应用程序的方式。它已经被广泛应用于各种类型的应用场景,如本地化工具、多媒体应用、游戏和娱乐应用、办公和生产力工具等。

随着Tauri社区的不断发展和完善,我们可以期待它在未来会有更加广泛的应用和发展前景,为开发者提供更加高效、安全和可靠的桌面应用程序解决方案。

相关文章
|
1天前
|
存储 Rust 前端开发
Tauri 开发实践 — Tauri 配置介绍
本文首发于微信公众号“前端徐徐”,主要讲解`package.json`、`Cargo.toml`及`tauri.conf.json`三个文件的配置。其中,`tauri.conf.json`最为复杂,涉及众多配置项。`package.json`用于配置前端依赖与脚本;`Cargo.toml`用于声明Rust应用依赖;`tauri.conf.json`则管理前端资源、API白名单等。这些配置对于Tauri应用的开发至关重要。
15 5
|
1天前
|
Rust 前端开发 iOS开发
Tauri 开发实践— Tauri 工程搭建
本文首发于微信公众号“前端徐徐”,介绍了在 macOS 环境下使用 Rust 和 Tauri 构建跨平台桌面应用的过程。首先需安装 Rust 及系统依赖,参考链接:[Rust 入门](https://www.rust-lang.org/zh-CN/learn/get-started) 和 [Tauri 前置条件](https://tauri.app/zh-cn/v1/guides/getting-started/prerequisites)。
8 0
Tauri 开发实践— Tauri 工程搭建
|
2月前
|
Rust 资源调度 内存技术
Tauri——如何创建一个tauri项目
Tauri——如何创建一个tauri项目
41 4
|
4月前
|
开发框架 Rust Dart
Flutter、Electron 和 Tauri 框架简介
Flutter、Electron 和 Tauri 框架简介
133 0
|
5月前
|
缓存 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
512 0
|
5月前
|
Web App开发 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能
508 0
|
5月前
|
传感器 前端开发 Android开发
【Flutter 前端技术开发专栏】Flutter 中的插件开发与集成
【4月更文挑战第30天】本文探讨了Flutter插件开发的关键技术和实践,包括插件作为连接Flutter与原生功能桥梁的角色,开发流程(定义接口、实现原生代码、打包发布),以及集成方法(添加依赖、初始化)。文中提到了多媒体、传感器和文件系统等常见插件类型,并以相机插件为例说明开发步骤。此外,还强调了版本兼容性、性能优化和错误处理的注意事项,推荐了开发工具和资源。随着Flutter的发展,插件开发将更加重要,未来有望形成更丰富的生态系统。
75 0
【Flutter 前端技术开发专栏】Flutter 中的插件开发与集成
|
5月前
|
前端开发 Android开发 开发者
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
【4月更文挑战第30天】本文探讨了使用Flutter开发混合应用的方法。混合应用结合Web技术和原生容器,提供快速开发和低成本维护。Flutter,一款现代前端框架,以其插件系统和高性能渲染引擎支持混合应用开发。通过创建Flutter项目、添加平台代码、使用WebView、处理平台间通信以及发布应用,开发者可构建跨平台混合应用。虽然混合应用有性能和用户体验的局限,但Flutter的跨平台兼容性和丰富的插件生态降低了开发成本。开发者应根据项目需求权衡选择。
140 0
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
|
5月前
|
前端开发 数据处理 Android开发
【Flutter 前端技术开发专栏】Flutter 中的调试技巧与工具使用
【4月更文挑战第30天】本文探讨了Flutter开发中的调试技巧和工具,强调其在及时发现问题和提高效率上的重要性。介绍了基本的调试方法如打印日志和断点调试,以及Android Studio/VS Code的调试器和Flutter Inspector的使用。文章还涉及调试常见问题的解决、性能和内存分析等高级技巧,并通过实际案例演示调试过程。在团队协作中,有效调试能提升整体开发效率,而随着技术发展,调试工具也将持续进化。
79 0
【Flutter 前端技术开发专栏】Flutter 中的调试技巧与工具使用
|
5月前
|
Dart Java Android开发
Flutter插件开发:开发与使用的技术解析
【4月更文挑战第26天】本文详细介绍了Flutter插件开发,包括创建插件项目、编写原生代码(Android和iOS)、注册与使用插件。通过Flutter命令行工具生成插件,使用MethodChannel进行Dart与原生平台的通信。示例展示了如何获取设备信息并展示在Flutter应用中。文章还提到插件测试与发布,强调了兼容性与性能的重要性,指出Flutter插件是扩展应用功能的关键。