Electron 与 Tauri:哪个跨平台框架更适合你?
ccwgpt 2024-11-19 02:28 47 浏览 0 评论
在跨平台应用程序开发领域,如果开发人员有一点共识,那就是使用 HTML、CSS 和 JavaScript 创建图形用户界面(GUI)比借助众多跨平台框架中的任何一个都更容易。像 Electron 这样的框架为开发者提供了一种两全其美的选择。你可以使用 JavaScript 或其他语言编写应用程序,并在网络浏览器中以 HTML 作为应用程序的 GUI。
不过,Electron 虽广为人知,但并非同类框架中的唯一选择。现在,让我们来认识一下 Tauri,一个与 Electron 类似的框架。这是一个较新的项目,相应地没那么成熟,但在底层架构上存在重大差异。在某些关键方面,Tauri 项目比 Electron 开发的项目更紧凑、更具前瞻性、更强大且更灵活。
下面,我们来对比一下这两个框架,看看它们究竟如何。
Electron 的工作原理
你很有可能正在通过 Electron 的核心技术 —— 网络浏览器阅读这篇文章。
Electron 最初由 GitHub 开发,它依赖于几个关键的网络浏览器项目:Chromium(Google Chrome 和 Microsoft Edge 的基础)以及 Node.js(和 Google V8)JavaScript 运行时。Electron 项目将相当于一个由 Chromium 驱动的便携式网络浏览器实例与应用程序代码重新打包在一起。当应用程序启动时,它会启动浏览器,进而加载与之捆绑的基于 JavaScript 的应用程序。
在网络浏览器中能实现的一切,在 Electron 应用程序中也都有可能实现。实际上,Electron 应用程序甚至可以做得更多,因为打包的浏览器部分有权以传统基于浏览器的应用程序(如渐进式网络应用程序)无法做到的方式与本地系统进行交互。
大量流行的应用程序都在使用 Electron。例如 Visual Studio Code,它是一款文本编辑器和可配置的集成开发环境(IDE)。还有 Discord 消息应用程序、Obsidian 笔记程序、Docker Desktop、GitHub Desktop、Slack 和 Basecamp 3 等,也都是 Electron 应用程序。
然而,一些 Electron 应用程序也颇受争议。比如 Microsoft Teams,它作为一个 Electron 应用程序曾被广泛诟病,尽管在最近的版本中有了大幅改进。
对基于 Electron 的应用程序的一个常见(且完全合理)的批评是它们的资源占用。Electron 应用程序配备了自己独特的、供应商提供的网络浏览器副本,并且在启动时必须启动一个完全独立的网络浏览器进程。Electron 应用程序在磁盘上可能占用数百兆字节甚至更多,其内存占用通常也非常大。虽然现代硬件通常能够处理这种负载,但一个更大的问题随之而来:难道就没有更好的方法吗?
以 Visual Studio Code 为例,这是一个流行的 Electron 应用程序。所有视觉元素和交互性都由一个独立的浏览器组件提供,该组件还负责处理与整个系统的交互。
Tauri 的工作方式
用 Rust 编写的 Tauri 项目背后的基本理念与 Electron 相似。你编写一个应用程序,其用户界面是网页,然后将该应用程序捆绑起来,使其通过一个自包含的网页浏览器运行。
Tauri 最大的不同在于它没有捆绑整个浏览器。相反,Tauri 为应用程序运行的任何操作系统使用本机系统的 webview 组件。这样,应用程序可以以小到几兆字节的捆绑包交付。Tauri 捆绑包使用 WRY 与本机 Web 视图进行交互,使用 andtao 进行窗口管理,并与系统托盘和其他资源进行接口。
你还可以使用大多数 HTML/CSS/JS 框架,Tauri 原生支持一大批流行的框架,如 Vue.js、Svelte、React、SolidJS、Angular、Preact、Yew、Leptos 和 Sycamore。你可以将现有的网络项目迁移到 Tauri 的后端。
不过,Tauri 有一个可能的缺点,那就是你至少需要一些 Rust 的经验。应用程序的后端或 “服务器端” 部分是用 Rust 编写的,整个软件包作为独立的 Rust 可执行文件进行编译和交付。
你可以将整个应用程序用客户端 JavaScript 编写,但这会严重限制其功能。除了 Rust 之外,还可以使用其他运行时或语言作为后端,例如 Python,但强烈推荐使用 Rust。
如果你对 Rust 还不太熟悉,Tauri 存储库中的示例应用程序是一个很好的起点,可以帮助你更好地了解 Rust,并查看如何实现特定概念,例如启动时带有启动屏幕的应用程序。
与 Electron 不同,目前用 Tauri 构建的主流桌面应用程序还比较少。这其中的一些原因可能是 Electron 的遗留影响,或者是 Rust 与 JavaScript 相比相对复杂。但也有相当多的应用程序,包括商业和开源的,都是用 Tauri 编写的。例如 PostgreSQL 的 pgMagic GUI 客户端、Payload 文件传输工具和 Noor 团队聊天应用程序。
以 Payload 为例,这是一个用 Tauri 编写的文件传输应用程序。在 Microsoft Windows 上,它的运行时内存占用仅为 4MB,但该应用程序可以访问与 Electron 应用程序相同的所有系统级功能。
哪个更好:Tauri 还是 Electron?
目前,Electron 仍然是跨平台用户界面框架中最突出和最被理解的。尽管存在各种批评,但它仍然是提供具有良好系统集成和丰富 GUI 的跨平台应用程序的流行默认选择。然而,关于 Electron 的内存消耗及其二进制文件大小的抱怨是合理的,而且这些问题不会很快消失。它们与 Electron 应用程序的设计密切相关,只有重新设计 Electron 或底层浏览器组件才能解决这个问题。
Tauri 应用程序的设计从一开始就不同,旨在占用更少的磁盘空间和更少的内存。但这是以它是一种严重依赖 Rust 的新技术为代价的 ——Rust 是一种相对较新的语言,其开发生态系统也相对较新。对 Tauri 的承诺需要分别对后端的 Rust 和前端的 JavaScript 做出承诺。
我的结论是:如果你已经掌握了 Rust 或计划对它做出承诺,并且如果可交付成果的大小及其内存占用很重要,那么 Tauri 是最好的选择。如果你已经非常了解 JavaScript,Electron 是最好的 —— 特别是如果你已经交付了其他基于 Electron 的应用程序,并希望利用这些知识 —— 并且 Electron 的内存消耗和二进制大小不是问题。
相关推荐
- Spring框架基础知识-第四节内容(Spring基础配置)
-
Spring基础配置Spring框架本身有四大原则:(1)使用POJO进行轻量级和最小侵入式开发。(2)通过依赖注入和基于接口编程实现松耦合。(3)通过AOP和默认习惯进行声明式编程。(4)使...
- SpringBoot项目开发实战销售管理系统——项目框架搭建!
-
项目框架搭建在完成项目的分析和数据库设计后,一般由架构师完成项目框架的搭建,包括项目依赖的添加、项目的配置和项目日志的配置,完成后再开始业务代码的编写。技术栈的搭建新建一个SpringBoot项目,...
- 从零到一:独立运行若依框架系统并进行本地二次开发
-
####一、环境准备1.**基础环境**:-JDK1.8+(推荐JDK17)-Maven3.6+-MySQL5.7+(推荐8.0)-Redis5.0+-Node.js16...
- 单片机时间片轮询程序架构(单片机如何实现精准的时间周期)
-
时间片轮询法有很多时候都是与操作系统一起被提到,也就是说很多时候是操作系统中使用了这一方法:STM32单片机开发中的RTOS。下文将参考别人的代码,演示建立的一个时间片轮询架构程序的...
- Netty主要组件和服务器启动源码分析
-
1.Netty服务端启动代码publicclassNettyServer{publicstaticvoidmain(String[]args)throwsInterrup...
- 前端定时任务的神库!快把它加到你的项目中去!
-
我们常会遇到定时刷新数据、轮询接口、发送提醒等场景,我们常会遇到定时刷新数据、轮询接口、发送提醒等场景。为什么选择cron库?定时任务开发痛点原生setInterval的时间误差累积难以实现复杂的...
- 如何正确实现一个后台(定时)任务(后台定时任务怎么实现)
-
相信大家都知道如何在.NET中执行后台(定时)任务。首先我们会选择实现IHostedService接口或者继承BackgroundService来实现后台任务。然后注册到容器内,然后注册到容...
- 秒杀传统的Linux Crontab,这款开源的定时任务管理系统绝了!
-
Gocron是一款开源的定时任务管理系统,基于Go语言开发,旨在替代传统的LinuxCrontab。它通过Web界面提供直观的任务管理功能,支持精确到秒的Crontab时间表达式,并具备任务重试、超...
- Python 定时任务:schedule 自动执行脚本太方便。
-
2025年了,还在为Python定时任务头疼?轻量级需求搞什么Celery,schedule三行代码就搞定。这库把定时任务简化到像说人话,但新手直接抄文档容易踩坑。文档只会告诉你怎么设置每10分钟执行...
- SpringBoot扩展——定时任务!(基于springboot的校园宿舍管理系统的设计与实现)
-
定时任务项目开发中会涉及很多需要定时执行的代码,如每日凌晨对前一日的数据进行汇总,或者系统缓存的清理、对每日的数据进行分析和总结等需求,这些都是定时任务。单体系统和分布式系统的分布式任务有很大的区别,...
- 适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架
-
简单到傻!Liang_SaaS适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架,利用Php开发AI的SaaS应用框架,是一个强大的内容管理仪表板模板,基于Bootstrap和...
- 非常实用的15款开源PHP类库(php开源管理系统)
-
PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程。这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互。此外,开发者使用这些类库还可以简...
- 蜂神榜苹果商店也凑热闹:“520”我爱玩家!
-
各位看官,今天被朋友圈各类“520”刷屏呢?有没有给你亲爱的家人一份“520”模式的红包呢?苹果商店也给了玩家一个“520”模式的惊喜---再一次提供了多款“1元”价格的游戏!并且此次降价的游戏品质都...
- 变成气球的猫咪《气球》十一正式推出
-
墨西哥游戏公司NoodlecakeGames曾开发过《致命框架》、《阿尔托冒险》等优秀佳作,而它旗下的最新游戏《气球》(TheBalloons)在十一的时候就要和大家见面了。游戏中,玩家要操控娃娃...
- 星座超游爱:狮子遇挑战,处女手抓牢~
-
teemo跟大家讲了三期太阳星座,也许有很多不热心的小伙伴并不知道是什么东西,今天就小科普一番~在出生的那一天,太阳所落的那个星座,就是每个人的太阳星座,而这恰好就是大家的性格中心,是权势驱力、人格的...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Spring框架基础知识-第四节内容(Spring基础配置)
- SpringBoot项目开发实战销售管理系统——项目框架搭建!
- 从零到一:独立运行若依框架系统并进行本地二次开发
- 单片机时间片轮询程序架构(单片机如何实现精准的时间周期)
- Netty主要组件和服务器启动源码分析
- 前端定时任务的神库!快把它加到你的项目中去!
- 如何正确实现一个后台(定时)任务(后台定时任务怎么实现)
- 秒杀传统的Linux Crontab,这款开源的定时任务管理系统绝了!
- Python 定时任务:schedule 自动执行脚本太方便。
- SpringBoot扩展——定时任务!(基于springboot的校园宿舍管理系统的设计与实现)
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)