查看原文
其他

Tauri 1.0 发布,它是Electron的杀手锏吗?

21CTO 21CTO 2023-01-28


作为一个前端开发者,相信你应该知道 Electron,它使用 JavaScript 开发跨平台的桌面应用程序。但你听说过 Tauri 吗?



Tauri官网:https://tauri.app/

Tauri 是一个UI框架,用于为所有主要桌面平台构建微小、极快的二进制文件。开发人员可以集成任何可编译为 HTML、JS 和 CSS 的前端框架来构建他们的用户界面。应用程序的后端是一个来自 Rust 的二进制文件,带有一个前端可以与之交互的 API。


以上介绍来自官方Github 仓库。接着我们概括一下 Tauri 的特点:


  • 体积小

  • 较好的用户体验

  • 二进制文件编译

  • 跨平台

  • 用户界面可以使用Web开发技术栈

  • 后端使用 Rust


看起来非常好。那么它会成为Electron的杀手锏吗?


Tauri 与 Electron 的对比


我们通过以下表格对比Tauri与Electron。

DetailTauriElectron
Installer Size Linux3.1 MB52.1 MB
Memory Consumption Linux180 MB462 MB
Launch Time Linux0.39s0.80s
Interface Service ProviderWRYChromium
Backend BindingRustNode.js (ECMAScript)
Underlying EngineRustV8 (C/C++)
FLOSSYesNo
MultithreadingYesYes
Bytecode DeliveryYesNo
Multiple WindowsYesYes
Auto UpdaterYesYes1
Custom App IconYesYes
Windows BinaryYesYes
macOS BinaryYesYes
Linux BinaryYesYes
iOS BinarySoonNo
Android BinarySoonNo
Desktop TrayYesYes
Sidecar BinariesYesNo


以上是 Tauri 和 Electron 现在的技术性能对比图。


我们可以看到Tauri 比 Electron 存在一些优势。比如打包大小、内存占用和启动时间。它还有一些 Electron 现在不支持的特性。


但是,Rust 是最引起我注意的地方。


近年来,Rust 频频出现在前端技术圈,SWC、Deno等都在用它。Rust 是一种静态类型安全的语言,没有运行时和垃圾收集机制。它特别擅长高性能、可靠性和生产力。并且编译器足够严格,以保证内存安全和线程安全。


在Taurui 中,Rust 被用作后端绑定和底层引擎。我们将在下面与 Electron 的比较中描述它是如何工作的。


接下来将从开发、构建、自动更新和架构这几个角度对两者进行比较。


开发


要创建 Tauri APP,首先要在本地计算机上准备好Rust 环境和Node.js 环境。


你可以访问他们的官方网站并按照步骤安装它们。接下来,我们专注于如何创建 Tauri 项目。


yarn create tauri-app #OR npx create-tauri-app


Tauri 内置了很多模板,开发者可以自由选择:



我在这里选择了 Vite + react-ts,这里是生成的目录:



可以看到项目结构非常清晰。如果选择其它的模板,整体项目结构大致相同,主要变化是前端项目目录结构。


我们来看看默认生成的package.json。代码如下:



非常好!Tauri 已经为我们做了一切。我们可以使用:yarn tauri dev 开发,使用yarn tauri build打包完整版软件产品。


Web 前端命令可以自定义,可以查看和修改 src-tauri/tauri.conf.json:



Tauri 也可以选择集成到现有的前端项目中。相比之下,Electron 官方并没有提供模板创建功能,只能按照其文档一步一步配置。


所以在开发体验方面,Tauri 做到了开箱即用,给开发者清晰的项目配置,绝对为我们节省不少时间。


构建与编译


Rust 现阶段因其编译时间而饱受诟病,这是 Tauri 打包时间过长的直接结果。但好消息是下一次编译会使用缓存来减少时间。此外,最终产品将以二进制形式存在,为破解增加了一层安全性。


默认情况下,Electron 不打包主进程代码,它甚至将巨大的代码打包node_modules到最终程序中。这进一步增加了构建产品的尺寸。这也导致源代码没有加密机制。即使将源代码包装在 asar 中,也很容易被破解。


当然,我们可以使用构建工具对源代码进行打包和混淆,这显然是费时费力的。


还值得注意的是,Electron 可以跨平台构建。例如,它可以在 Mac 平台上为 Windows 平台构建包。而Tauri目前只能搭建在相应的平台上。这对于自动打包和分发的系统来说是一个麻烦。


自动更新


为了支持三大桌面平台的自动更新,Electron 需要第三方库,例如electron-builder或electron-packager. Tauri 可以原生支持它。


架构


在架构上,Tauri 没有包含 Chromium。它使用自研的WRY连接各个平台的Web引擎,并提供统一的接口来渲染WebView。


它使用的每个平台的底层 Web 引擎为:


  • 在 Windows 平台上使用来自 Microsoft Edge Chromium 的 WebView2;

  • 在Mac 平台上为 WebKit;

  • 在 Linux 平台上使用 WebKitGTK。


这意味着,它与 Chromium 无关。如果在 Mac 平台上打开 DevTools,可以看到它的内部 UI 和 Safari 是一致的。如果你在 Windows 平台上打开 DevTools,你会发现它的内部 UI 和 Microsoft Edge 是一致的。



也就是说,它只做粘合剂层,所以它生成应用的体积会很小。


除此之外,Tauri 还开发了跨平台应用程序窗口创建库TAO ,并将其重新导出到 WRY 中,用于事件循环和窗口创建。


而 Electron 封装了整个 Chromium 用于前端渲染。在事件循环中,它启动了一个单独的线程,该线程不断地在 Node.js 中轮询来自libuvbackend_fd的新事件。当发现新事件时,它们会被转发到 Chromium 的事件循环(MessageLoop)。详情请见下图。



通过上述方式,Electron 将 Node.js 的事件循环集成到 Chromium 的事件循环中,以保证应用程序的性能。


比较两者,我的感性认知是:


  • Electron 更像是一种融合技术,将 Node.js 集成到 Chromium 中。

  • Tauri 更像是胶水,将 WebView 的渲染交给各个平台内置的 Web 引擎。Tauri 是顶层,可以通过 WRY 和 TAO 控制 GUI。


结论


Tauri表现不错,前景看好。它解决了 Electron 现有的讲多问题,带来了轻巧、简单、便捷的开发体验。但是它还有一些问题需要改进,Rust的学习曲线比较大,对于初学者有一定的学习成本。


Electron 今天发展得很好。并且它依赖于蓬勃发展的 Node.js 社区,其周边生态非常好。它在前后端使用JavaScript,因此学习成本更小。


Tauri 做为后来的产品,它一定要比先前的产品要好才会有生命力,才能超越前辈;同时,先前的产品也是这样过的,能过竞争也会更好的革新自己。


那么,各位怎么看Tauri?


作者:洛逸


推荐阅读:


跨平台:Electron 16.0 可连接到实验性 WebHID-API

在 Linux 上搭建一个可重复的前端开发环境

Deno 新推出 Fresh 框架:从编辑器到边缘计算,无需构建



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存