文章翻译自:Tauri VS. Electron - Real world application

以下是正文:

在这篇文章中我将会用真实的项目来比较 Electron 和 Tauri: Authme。Authme 是一个跨平台使用双因素验证的桌面程序。不大也不复杂,很适合作比较。你可以在 GitHub 上查看使用 Electron 开发的源代码,也可以在 GitHub 查看使用 Tauri 开发的源代码。我的目标是使用 Tauri 完全替代 Electron。

Electron 程序架构

Electron 是什么

Electron 是一个使用 JavaScript, HTML, and CSS 等web技术创建原生应用程序的框架。它负责处理难的部分以至于你只要专注在你应用上。如果你能构建一个网站,那么你也可以额构建一个桌面应用程序。

程序架构

The Electron app is written in plain-old HTML and JavaScript. For styling I'm using TailwindCSS and some custom CSS.

Electron 程序是使用普通的 HTML 和 JavaScript 编写的。样式部分使用了 TailwindCSS 和一些自定义样式。

Tauri 程序架构

Tauri 是什么

Tauri 是一个为所有主要的桌面平台构建微小、速度极快的二进制文件的框架。开发者可以使用任意编译为 HTML, JS 和 CSS 的前端框架来构建他们的用户界面。应用程序的后端是一个 rust 二进制文件,其中包含前端可以与之交互的 API

架构

我的 Tauri 应用程序使用了更现代的堆栈。构建工具是 Parcel,框架是 Svelte,使用 TypeScript 代替了 JavaScript。样式使用 TailwindCSS 完成。

比较

This is not a head-to-head comparison, but the app is basically the same.

这不是一个直接的比较,但应用程序基本上是相同的。

关键点:

  1. 启动时间
  2. 性能
  3. 程序后端
  4. 渲染程序
  5. 安全
  6. 自动更新
  7. 开发经验

1. 包

毫无疑问的赢家:Tauri

Tauri 程序安装包只有大约 2.5MB(!!!),而 Electron 程序安装包却有 85MB

Full bundle size:

Tauri 有一个主要的优势:程序会被编译为二进制,意味着你要成为一个逆向工程专家才能反编译程序。而在Electron 程序中你可以使用简单的 NPM 命令 拆解程序。

如果你的用户有 Tauri 使用的 webview 的正确运行时,那么你可以仅仅发送一个简单的可执行文件给他们,用户也不用安装任何东西。

2. 启动时间

虽然不是一个精确的测试,但运行程序并记录启动时间方面产生了一个赢家:

  • Tauri: ~ 2 秒
  • Electron: ~ 4 秒

3. 性能

同样这也不是一个精确地测试,只是一个粗略的比较。这些测试来自我的电脑:i5-4570 CPU, 16GB RAM, GTX 1660 and Windows 11

Tauri (Windows)

Test CPU RAM GPU
Idle 1% ~ 80MB 0%

Electron (Windows)

Test CPU RAM GPU
Idle 1% ~ 120MB 0%

Honestly I expected more from Tauri, sure it uses less RAM, but not by much. Let's take a look at what's up on the Linux side.

说实话我更期待 Tauri,它使用了更少的 RAM,但也不是很少。让我们看看在 Linux 上运行的情况。

Tauri

Electron

哇,Tauri 大胜!

4. 程序后端

这是 Tauri 的一个劣势(或者可以说是它最大的优势,取决于你自己)。在 Electron 程序中你可以使用 JavaScript 编写程序后端,因为 Electron 使用了 Node.js 运行时。Tauri 由 Rust 编写而来。如果你了解 Rust 可能会高兴,但如果你要在 scratch 上学习 Rust(我就是),你将要面对一些问题。

你必须使用 Rust 重新编写你的程序,所以我认为在这方面 Electron 是赢家。现在,后端的可选替代比如 Python,C++,Deno 已经在 Tauri 的规划中了,我很期待 Deno 的整合,这样我就可以再次用 JavaScript/TypeScript 编写程序了。

5. 渲染你的程序

Electron 是基于 Chromium 的,所以用户能在 Windows,Linux,macOS 上看到相同的界面。而 Tauri 使用的是系统 webview:Windows 上的 Edge Webview2 (Chromium),Linux 上的 WebKitGTK 和 macOS 上的 WebKit。糟糕的部分来了,如果你是一个 web 开发者你应该知道 Safari(Based on WebKit) 总是落后于每个 web 浏览器。可以通过  Can I Use 检测。总有一个 bug 出现在你亲爱的 Safari 用户上却不会出现在 Chrome。Tauri上有相同的问题存在并且除了包含 polyfills 不能做任何事情处理它。这方面来说,Electron是赢家。

我在开发 Tauri 时遇到的一个问题是我的 CSS 包没有包含“-webkit”前缀,所以我的应用程序的 CSS 漏洞百出。

6. 安全

Tauri 是非常安全的,但我不会说 Electron也是。Tauri 有许多内置的 安全 特性。你甚至可以显式启用或禁用某些 API。再 Electron 中你可以使用全部的 Node 接口,所以黑客很容易利用这些强大的接口。而Tauri 的情况并非如此,你必须显式地公开 Rust 函数。

7. 自动更新

xkcd.com

在2022年发布一个没有自动更新的应用程序是不可行的。如果你的用户不得不手动下载每一个更新,我不认为他们会高兴。Electron 和 Tauri 都有一个内置的自动更新程序,但 Tauri 的更加简单。我认为大部分人在 Electron 中使用 electron-updater。而 Tauri 中可以使用 内置 的更新器,不过不好的一面是你不得不维护自己的 更新服务 或者使用一个简单的 JSON file 不过你不得不手动更新。Electron 更新器从 GitHub 发布的二进制文件中提取信息,这样更加方便。

8. 开发经验

对于 Tauri,安装 Tauri CLI 就能得到整个包:热更新,在所有平台上构建你的程序,生成应用图标。而 Electron 除了框架本身之外什么都不会给你。你必须建立热更新,打包程序等等... Tauri 已经给你准备了所有东西。最棒的是:Tauri可以兼容世界上每一个 web 框架。它只需要一个本地路径或者文件夹其中包含所有绑定的代码。

总结

Electron 将会被替代?是的,Tauri 更好,但它仍然有待提高。我可以肯定未来几年里 Tauri 团队会抓住机会做得更好(这里可能翻译的不是很好,原文是:In a couple of years I'm sure the Tauri team will catch app to Electron)。令我期待的是:Deno 作为后端,更好的自动更新,对iOS/Android的支持。

感谢阅读我的第一篇文章!我的母语不是英语,文章中如果有任何错误的地方我感觉抱歉。

Tauri VS. Electron - 真实项目的比较的更多相关文章

  1. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  2. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  3. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  4. 用java发邮件之一 (直接源于真实项目) 【原】

    真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...

  5. 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)

    学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...

  6. Electron桌面项目-解决throw new Error('Electron failed to install correctly, please delete node_modules..

    前言 Electron 是一个用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库.由GitHub开发的. 其原理是 Electron 通过将 Chromium 和 N ...

  7. Solr搭建真实项目

    在经过solr5.4.1 quick start  的学习后.我们要搭建真实的项目了 1.启动项目 bin/solr start 2.创建core bin/solr create -c pms 3.为 ...

  8. electron demo项目npm install安装失败解决办法

    electron官网提供的demo项目,在npm install 的时候总是报错显示安装失败, 解决办法:FQ即可成功安装.

  9. 手把手教你创建electron+vue项目

    electron可以结合前端的很多框架来进行快速的开发.在这里只讲一种electron结合vue并且使用前端的elementui来快速搭建一个项目页面. 第一步.创建electron 以管理员身份运行 ...

  10. vue真实项目结构

    我明白你的需求.如果你想看一个真实企业项目使用的复杂目录结构,你可以参考以下几个例子: 根据1的介绍,一个vue项目的目录结构可以细分为以下几个部分: |- src | |- api 存放所有请求接口 ...

随机推荐

  1. POJ 1236 Network of Schools (连通图 - Garbow 算法)

    POJ 1236 Network of Schools ​ 校园网:给定N所学校和网络,目标是分发软件其他学校都可收到,求①所需最少分发学校数:②若任选学校都能收到,最低新增边数. 思路:同一个强连通 ...

  2. Codeforces 1326A Bad Ugly Numbers (思维)

    Codeforces 1326A Bad Ugly Numbers 看完题目,第一直觉,质数肯定满足题意,再看数据范畴,\(1≤n≤10^5\), 质数线性筛仅能做到 n=7 的情况,即处理到1000 ...

  3. vue 状态管理 四、Action用法

    系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...

  4. Java 子父类型集合之间的转换

    假设现在有这样一个方法,入参是父类型的集合参数,这是个通用方法,你需要共用它,你现在要传子类型集合进去,怎么办? class Animal { } class Dog extends Animal { ...

  5. 本地打包编译jdk版本问题

    一.遇到的问题 进行项目接入pinpoint-ice插件,启动项目时pinpoint-agent日志报如下不支持jdk8的错误.'   二.排查 我们是在个人笔记本电脑上windows环境下通过mav ...

  6. linux-介绍

  7. [转帖]002、体系结构之TiDB Server

    TiDB Server 1.TiDB总览 1.1.TiDB Server架构 1.2.TiDB Server 主要功能: 2.SQL语句处理 语句的解析和编译 SQL层 协议层 上下文 解析层 逻辑优 ...

  8. [转帖]Shell if 条件判断

      Shell  语言中的if条件 一.if的基本语法: if [ command ];then    符合该条件执行的语句 elif [ command ];then    符合该条件执行的语句 e ...

  9. [转帖]Promethues + Grafana + AlertManager使用总结

    Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ...

  10. [转帖]ELF文件详解

    一.ELF概述 1.ELF的定义 ELF(Executable and Linkable Format)文件是一种目标文件格式,常见的ELF格式文件包括:可执行文件.可重定位文件(.o).共享目标文件 ...