」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Tauri 與 Electron:技術比較

Tauri 與 Electron:技術比較

發佈於2024-07-30
瀏覽:985

Tauri vs. Electron: A Technical Comparison

对于桌面应用程序开发中的 Web 技术,最有前途的两个游戏参与者是 Tauri 和 Electron。值得注意的是,每个项目都旨在提供使用 Web 技术构建跨平台桌面应用程序的工具,但与此同时,它们的实现方式却截然不同。本文将尝试从架构、性能、安全性、开发经验、社区支持等方面详细阐述 Tauri 和 Electron 的技术比较。

1. 架构

电子架构:

核心组件: Electron 是开源 Web 渲染引擎 Chromium 和开源 JavaScript 运行时 Node.js 的组合。它生成的运行时具有通过 Web 技术开发桌面 GUI 的所有功能。

进程模型: Electron 应用程序运行一个名为主进程的 Node.js 进程。该进程管理应用程序中的生命周期事件,并且可以生成多个渲染器进程(每个应用程序窗口一个)来处理 GUI。
捆绑:由于 Electron 捆绑了整个 Chromium 和 Node.js,因此应用程序的规模往往相对较大。

金牛座架构:

核心组件: Tauri 是一个相当轻量级的框架;它仅使用操作系统的 webview 组件(在 Windows 上使用 WebView2、在 macOS 上使用 WKWebView、在 Linux 上使用 WebKitGTK)来渲染 UI,并利用 Rust 来实现后端逻辑。

流程模型: Tauri 将前端(在 Web 视图中运行)与后端(用 Rust 编写)分开,提高了安全性和性能。

捆绑: Tauri 应用程序使用的本机 webview 组件意味着与捆绑完整浏览器引擎的应用程序相比,它们的捆绑包要小得多。

2. 性能

电子:

内存使用: 由于捆绑的 Chromium 引擎和运行多个进程的开销,Electron 应用程序往往会消耗更多内存。

启动时间: Electron 应用程序的启动时间往往很慢,因为它首先必须启动整个 Chromium 引擎。

运行时性能: 由于 Chromium 引擎有时占用大量资源,Electron 应用程序有时运行效率较低。情况就是如此,尤其是对于具有许多 UI 组件或复杂渲染需求的应用程序。

金牛座:

内存使用: Tauri 应用程序通常消耗少量内存,因为它由本机 webview 和轻量级 Rust 后端提供支持。

启动时间: 一般来说,Tauri 应用程序由于较小的应用程序大小和使用原生 webview 组件,启动速度会更快。

运行时性能:因此,Tauri 将能够利用 Rust 在安全方面的性能和功能,使其在资源有限的环境中发挥强大的作用。需要高性能的应用。

3. 安全性

电子:

沙箱: 虽然 Electron 渲染器进程被沙箱化,但主进程具有对系统的完全访问权限,如果处理不当,会带来一些安全问题。

漏洞面: 完整的 Chromium 引擎增加了攻击面。这使得针对新发现的漏洞频繁更新和升级势在必行。

IPC(进程间通信): 必须谨慎地实现进程间通信模型,以使主进程和渲染进程能够安全地通信,而不会出现任何安全故障。

金牛座:

沙箱: Tauri 沙箱的架构将 webview/UI 与后端/逻辑分开。这本质上降低了安全漏洞的风险。

漏洞面: 与构建和捆绑的整个浏览器引擎相比,漏洞面较低,因为它使用系统中的本机 webview 组件。

IPC: Tauri 拥有更安全的进程间通信机制,这要归功于 Rust 强大的类型和内存安全保证,降低了安全问题的风险。

4. 开发经验

电子:

生态系统: Electron 拥有成熟的生态系统,拥有丰富的文档、无数的插件和大量社区开发的模块。

工具: 用于 Web 开发的共享工具和库使开发人员的工作变得更轻松。

调试: Chrome DevTools 等工具与 Electron 捆绑在一起,而且调试起来非常容易。

金牛座:

生态系统: Tauri 是一个生态系统,每天都在围绕它成长;支持和文档也在日益增加,但仍处于早期阶段。我们可以将其与 Electron 生态系统的早期版本进行比较。

工具: Tauri 与当今的现代 Web 开发工具有很好的集成,并且它的 Rust 后端可以使用 Rust 强大的工具进行管理。

调试: 调试技术包括 webview 调试工具和 Rust 调试工具,它们本质上更丰富,但有时设置起来更复杂。

5. 社区支持

电子:

采用率: 与其他许多知名应用程序(Slack、Visual Studio Code、Discord)相比,Electron 的采用率很高。

社区: Electron 周围庞大而活跃的社区形成了一个强大的支持网络,具有频繁的更新和大量第三方资源。

金牛座:

采用: Tauri 较新,但由于其轻便性和带来的安全优势,正在迅速被采用。

社区:Tauri的社区规模随着新贡献的增多而不断扩大;事实上,该项目非常活跃,但肯定没有 Electron 项目那么大。

结论:

根据项目的必要性和限制在 Tauri 和 Electron 之间进行选择:

Electron 将适合那些以成熟的生态系统、常见的 Web 开发实践、全面使用 JavaScript 和广泛的社区支持为目标的开发人员。然而,上述优点会导致较高的内存消耗和应用程序大小。

Tauri — 当您通过充分利用 Rust 和本机 webview 组件来关心性能、安全性和小型应用程序大小时使用。生态系统正在快速发展,但如果开发人员不熟悉 Rust,可能需要更大的学习曲线。
这两个框架都可以提供良好的跨平台桌面应用程序,最佳选择将取决于您的项目的优先级和开发团队的专业知识。

版本聲明 本文轉載於:https://dev.to/vorillaz/tauri-vs-electron-a-technical-comparison-5f37?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 在Java中如何為PNG文件添加坐標軸和標籤?
    在Java中如何為PNG文件添加坐標軸和標籤?
    如何用java 在現有png映像中添加軸和標籤的axes和labels如何註釋png文件可能具有挑戰性。與其嘗試可能導致錯誤和不一致的修改,不如建議在圖表創建過程中集成註釋。 使用JFReechArt import java.awt.color; 導入java.awt.eventqueue; 導...
    程式設計 發佈於2025-04-27
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-04-27
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-04-27
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-04-27
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-04-27
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-04-27
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python import codecs import codecs import codecs 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有...
    程式設計 發佈於2025-04-27
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    程式設計 發佈於2025-04-27
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-27
  • 如何使用Python有效地以相反順序讀取大型文件?
    如何使用Python有效地以相反順序讀取大型文件?
    在python 中,如果您使用一個大文件,並且需要從最後一行讀取其內容,則在第一行到第一行,Python的內置功能可能不合適。這是解決此任務的有效解決方案:反向行讀取器生成器 == ord('\ n'): 緩衝區=緩衝區[:-1] ...
    程式設計 發佈於2025-04-27
  • 為什麼我的CSS背景圖像出現?
    為什麼我的CSS背景圖像出現?
    故障排除:CSS背景圖像未出現 ,您的背景圖像儘管遵循教程說明,但您的背景圖像仍未加載。圖像和样式表位於相同的目錄中,但背景仍然是空白的白色帆布。 而不是不棄用的,您已經使用了CSS樣式: bockent {背景:封閉圖像文件名:背景圖:url(nickcage.jpg); 如果您的html,cs...
    程式設計 發佈於2025-04-27
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-04-27
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-04-27
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-04-27
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-04-27

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3