为什么electron占用空间大,而Tauri占用小,他们不都是封装Chromium吗

server/2024/9/23 8:02:33/

Electron 和 Tauri(使用 WebView)的确都涉及嵌入浏览器引擎来渲染 HTML、CSS 和 JavaScript,但它们的架构和设计有显著不同,这导致了它们在应用程序体积和资源占用上的差异。以下是一些关键的原因:

1. 嵌入的浏览器引擎

Electron: Electron 包含了完整的 Chromium 浏览器引擎和 Node.js。这意味着每一个 Electron 应用都需要捆绑 Chromium 引擎和 Node.js 环境,这部分内容本身就比较大。Chromium 是一个功能齐全的浏览器,包含了所有与现代浏览器相关的功能和工具,因此它的体积比较大,通常一个简单的 Electron 应用就可能达到 100MB 以上。

Tauri(WebView): Tauri 使用的是系统自带的 WebView,而不是捆绑一个完整的浏览器引擎。WebView 是操作系统的一部分,像 Windows 上的 WebView2、macOS 上的 WebKit,以及 Linux 上的 WebKitGTK 都是操作系统自带的,因此 Tauri 应用程序不需要将浏览器引擎随应用一起打包,这显著减少了应用的体积。

2. 功能集成

Electron: 由于捆绑了完整的 Chromium 和 Node.js,Electron 应用程序在内存和磁盘占用方面相对较重。此外,Electron 提供了一整套 API,让 JavaScript 可以访问本地操作系统功能,因此 Electron 应用实际上在某种程度上充当了一个完整的运行时环境。

Tauri: Tauri 应用通常只加载所需的系统 WebView,并通过 Rust 或其他轻量级的技术来提供本地系统功能的访问。Rust 编译出来的二进制文件通常非常小,并且运行时不需要大量的依赖库,这也降低了应用程序的总体大小。

3. 内存管理和性能

Electron: 由于每个 Electron 应用都运行在独立的 Chromium 实例中,这意味着每个应用都像是运行了一个独立的 Chrome 浏览器。这个 Chrome 浏览器不仅要处理应用的 UI,还要管理大量的后台进程,导致较高的内存和 CPU 占用。

Tauri: 使用系统的 WebView 通常意味着内存管理和进程管理都是由操作系统直接处理的,且在系统层面上进行了优化。此外,Tauri 的后端代码是用 Rust 编写的,Rust 的内存管理机制非常高效,进一步减少了应用的内存占用。

4. 开发模型

Electron: Electron 提供了一种“自带所有”的开发模型,所有必要的组件都捆绑在一起,这使得开发过程更简单,但同时也导致了更大的应用程序体积。

Tauri: Tauri 强调轻量级和效率,通过利用操作系统已有的功能来减少重复和冗余。这种开发模型虽然可能需要开发者更仔细地处理不同平台上的兼容性问题,但可以显著减少应用程序的体积。

5. 依赖管理

Electron: 由于 Electron 应用通常还依赖于很多 Node.js 模块,而这些模块的体积也可能相当可观,尤其是当它们包括原生扩展或大量的依赖链时。

Tauri: Tauri 应用的依赖通常更少,尤其是在不依赖大型的 JavaScript 库的情况下。Rust 生态中的依赖管理工具(Cargo)也倾向于生成更紧凑的可执行文件。

总结

Electron 占用空间大的主要原因在于它包含了完整的 Chromium 浏览器引擎和 Node.js 环境,这些组件本身就很大,且每个 Electron 应用都需要将这些组件打包在一起。
Tauri 使用系统自带的 WebView 来渲染界面,而不需要将整个浏览器引擎打包在应用中。这使得 Tauri 应用通常非常小巧,并且由于使用 Rust 编写后端,性能和内存管理更加高效。
因此,虽然两者都封装了浏览器引擎,但由于 Tauri 利用了操作系统已有的资源,并且在设计上更轻量,所以其占用的空间要比 Electron 小得多。
在这里插入图片描述


http://www.ppmy.cn/server/100497.html

相关文章

和小米比起来希喂宠物空气净化器怎么样?

有宠物用哪个牌子空气净化机比较好呢?有宠物的家庭除异味、除毛、除菌需求比不养宠的更大,所以有宠物的家庭选空气净化器时一定要着重看这几点。 最近,我发现身边的朋友们都开始重视起家居空气质量,特别是有了宠物之后&#xff0…

C++ | stack/queue

前言 本篇博客讲解cSTL中的stack/queue 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大…

AI学习记录 - gpt如何进行token化,理论知识,以GPT2为举例

AI学习记录已经发了十几篇,大佬们可以看看,如果有帮助动动小手点赞 token入门版,有空会更新具体代码操作 GPT4当中,我们提问问题是按照token进行扣费的,那到底什么是token? 在不同的语言模型当中&#x…

【大模型】llama-factory基础学习

前言:LLaMA-Factory项目的目标是整合主流的各种高效训练微调技术,适配市场主流开源模型,形成一个功能丰富,适配性好的训练框架。 目录 1. 前期准备2. 原始模型直接推理3. 自定义数据集4. 模型训练5. 模型合并并导出 1. 前期准备 …

【Unity-UGUI】UI重建

UGUI UI重建二三事(一) UGUI UI重建二三事(二) [UGUI源码二]Unity UI重建(Rebuild)源码分析 这一部分主要是通过以上几篇文章学习的,总结一下: UI重建主要分类两类,一类是布局重建(Layout Rebuild),另一类是图形重建(Graphic Reb…

Android控件详解

在Android应用程序中,界面由布局和组件组成。布局相当于框架,而控件则是框架里面的内容。了解过Android布局后,如果要设计ui界面,还需要了解和掌握各个控件的应用。 一个界面的设计,先从创建容器开始,再向…

水库大坝安全预警系统的作用

“汛情就是命令,防汛就是责任”,为了防治和减轻洪涝带来的危害,需要一种以预警为先导的临灾位移监测系统--水库大坝安全预警系统,对可能会出现的灾害进行实时远程监控,尽可能做到隐患早发现、早决策、早治理&#xff0…

C语言中10个字符串函数详解

目录 1.strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 1.strlen 基本结构:size_t strlen(const char *str);功能:用于计算字符串的长度;字符串已经 0作为结束标志…