1.1. Tauri 是什么
Tauri 是一个跨平台 GUI 框架,与 Electron 的思想基本类似。Tauri 的前端实现也是基于 Web 系列语言,Tauri 的后端使用 Rust。Tauri 可以创建体积更小、运行更快、更加安全的跨平台桌面应用。
1.2. 前端看法
tauri 这个时候火是要带这个时间点的背景来看的,其中我认为最重要的 2 点是 rust 和 webview2。
rust
- rust 多受欢迎这里不多表述,仅抛几个链接,linux 内核接纳 rust, deno 采用 rust, 微软拥抱 rust, fuchsia 的 rust 代码占比超 50%, Apple 在底层 all-in rust, 连续 6 年的 stackoverflow 最受欢迎语言。
- tauri 采用的 rust 对应了 electronjs 的 nodejs, 没有 nodejs 这个 runtime, 也就更薄。nodejs 的最大优势是异步事件驱动 libuv 和 js 语言。rust 基于 future 的 tokio 等库有得一比,(且熟悉的 async await 开箱可用)。rust 强烈拥抱 wasm 对各端语言的开发者诱惑力很大。
- rust 被很多开发者定位为系统编程,对系统 api 的集成和调用优势很大。
- rust 还有满多优势:编译期内存安全、零成本抽象、支持高并发、丰富类型系统、易用的 cargo 包管理、ffi 编译友好(和 node-gyp 比更友好)
- 缺点是学习门槛高,但对于 c/c++开发者而言包管理、标准库、编译期内存安全等诱惑力十足。
webview2
- tauri 使用的渲染库 wry 在 macos 下采用 Webkit.framework, 在 windows 下采用了 webview2。
- 微软对 webview2 runtime 的支持力度比较大。为提升 office 应用、outlook 等的体验,2021 年 4 月开始对 windows 2101 版本以上进行推送。具体覆盖率数据目前不清楚(看有没哪位大神可以透露下)。
- 不同应用可以共享 webview2。electronjs 想实现的共享运行时被 webview2 实现了。
- webview2 runtime 122MB, win11 预装了,win11 之前的版本可以内嵌到应用的安装包,可以复用非稳定版 edge 浏览器的 runtime(稳定版不复用), 也可以单独下载(推荐,这样不同 tauri 应用可以共享 runtime)。
- webview2 runtime 的常青模式甚至可以做到比 electronjs 的 chromium 更新更快。
- 微软内部桌面应用逐渐从 electron 切换到 webview2。
总而言之 tauri 是卡着时间点的框架,是桌面应用螺旋形上升发展的一个现象级框架。
1.3. 开源项目作者看法
作为 Electron 的替代方案,这类的框架越来越多,tauri 只是其中之一,他们都尝试解决 Electron 的两个比较明显的的问题:
- 包太大,因为 electron 会自动塞入 Chromium 和 nodejs, 一个什么也不做的 electron 项目压缩后也大概要 50m。
- 内存消耗过大,因为 Chromium 本身就很吃内存,再加上提供操作系统访问能力的 nodejs, 很可观的内存消耗,对小工具类的项目不友好。
tauri 看了一下,不再塞入 Chromium 和 nodejs, 前端使用操作系统的 webview, 后端和操作系统集成这块使用 rust 实现,理论上应该比 nodejs 要精简高效,类似的项目还有:
- NeutralinoJS 前端嵌入一个 webview, 后端直接实现一个 c++ 实现的 http server。
- Chromely 前端嵌入一个 CEF, 后端使用 .NET。
- electrino 和 tauri 类似,使用系统的 webview, 并实现一个后端 (windows 下似乎也是基于 .NET)。
- go-astilectron 仍然基于 Electron, 但后端换成 go 语言。
- wails webview+go 的后端
但是这类项目的问题都在于:不成熟,基本上看下文档就知道了,作为开发桌面应用的方案,操作系统访问的 api 很少,甚至不具备 ( 或者是没有写文档?), 很难用于开发正式的项目,但是值得关注,一旦成熟起来,替代 Electron 就大有希望。