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

Tauri 與 Electron:技術比較

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

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]刪除
最新教學 更多>
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python 導入編解碼器 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有表情符號 emoji_pattern = re.compile(“ [”...
    程式設計 發佈於2025-02-06
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在默認值中使用current_timestamp或mysql版本中的current_timestamp或在5.6.5 這種限制源於遺產實現的關注,這些限制需要為Current_timestamp功能提供特定的實現。消息和相關問題 `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-02-06
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    使用(1)而不是(;;)會導致無限循環的性能差異? 現代編譯器,(1)和(;;)之間沒有性能差異。 是如何實現這些循環的技術分析在編譯器中: perl: S-> 7 8 unstack v-> 4 -e語法ok 在GCC中,兩者都循環到相同的彙編代碼中,如下所示:。 globl t_時 ...
    程式設計 發佈於2025-02-06
  • gdb為什麼在捕獲異常時會哭泣“丟失rise.c”?
    gdb為什麼在捕獲異常時會哭泣“丟失rise.c”?
    GDB的哀嘆:解決丟失的rise.c conundrum 在捕獲異常時,GDB可能會出現煩人的錯誤缺乏“加薪”。要解決這個問題,讓我們深入研究問題及其解決方案的深處。 基礎原因 有效地解決此問題,請按照以下全面的步驟操作: install debuginfo packages:通過安裝“ ...
    程式設計 發佈於2025-02-06
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-06
  • 如何在GO中有效初始化數組,類似於C ++的Memset?
    如何在GO中有效初始化數組,類似於C ++的Memset?
    在go中有等效的memset嗎? 在C中,MEMSET函數允許具有特定值的數組的有效初始化。在GO中,儘管沒有直接等效的詞,但幾種技術可以實現相似的結果。 最簡單的方法是使用循環來設置每個元素對所需值的數組。 = v } } repoyed copy() int,v int){ ...
    程式設計 發佈於2025-02-06
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 問題:考慮以下CSS和HTML: position:fixed ; grid-template-columns:40%60%; grid-gap:5px; 背景: #eee; 當位置未固定時,網格將正確顯示。但是...
    程式設計 發佈於2025-02-06
  • React中的異步使用效應功能是否需要清理功能?
    React中的異步使用效應功能是否需要清理功能?
    async functions for async functions:導航清理困境在將useeffect hook與async函數中使用時,開發人員可能會遇到以下以下的訪問警告:此警告源於在組件未填充時清理async函數使用的資源的需求。沒有清理功能,在刪除組件後可能會繼續進行長期運行的異步任...
    程式設計 發佈於2025-02-06
  • 如何在Java列表中有效計算元素的發生?
    如何在Java列表中有效計算元素的發生?
    計數列表中的元素出現在列表 中,在java編程中,列舉列表中列舉元素出現的任務來自列表。為此,收集框架提供了全面的工具套件。 在這種情況下,Batocurrences變量將保持值3,代表動物列表中的“ BAT”出現的數量。 &&& [此方法是簡單的,可以得出準確的結果,使其成為計算列表中元素出現的...
    程式設計 發佈於2025-02-06
  • 深副本與淺副本與Java中的克隆:有什麼區別,我什麼時候應該使用?
    深副本與淺副本與Java中的克隆:有什麼區別,我什麼時候應該使用?
    複製值與復制對象在討論複製類型之前,對於區分 copy values 和複製對象: 複製一個值:複製參考類型的值涉及分配對象引用,類似於復制integer。 && && && && &&&華複製一個對象:創建一個具有自己身份的新對象,涉及使用“新”顯式或隱式。對象的深拷貝 淺複製:一個新對象的值與...
    程式設計 發佈於2025-02-06
  • JavaScript的伴侶
    JavaScript的伴侶
    [2 了解JavaScript承諾 承諾是JavaScript中的一個強大功能,可以簡化處理異步操作的處理。它們提供了一種更清潔,更直觀的方式來處理異步代碼,避免了諸如“回調地獄”之類的問題。 什麼是諾言? 是一個代表異步操作的最終完成(或失敗)及其結果值的對象。它使...
    程式設計 發佈於2025-02-06
  • 如何在整個HTML文檔中設計特定元素類型的第一個實例?
    如何在整個HTML文檔中設計特定元素類型的第一個實例?
    [2單獨使用CSS,整個HTML文檔可能是一個挑戰。 the:第一型偽級僅限於與其父元素中類型的第一個元素匹配。 以下CSS將使用添加的類樣式的第一個段落: }
    程式設計 發佈於2025-02-06
  • 如何使用Flexbox將元素與容器的底部對齊?
    如何使用Flexbox將元素與容器的底部對齊?
    在提供的方案中使用FlexBox 在提供的方案中,您有一個帶有各種子元素的div容器。您的目的是實現一個佈局,而元素垂直堆疊,無論文本的高度如何。 flexbox通過自動保證金提供了解決此問題的解決方案。自動利潤率使剩餘空間在對齊之前的元素中分佈到具有自動邊緣的元素。實現所需佈局的一種方法是使用...
    程式設計 發佈於2025-02-06
  • 如何精確測量.NET中的方法執行時間?
    如何精確測量.NET中的方法執行時間?
    .NET方法執行時間的精確計算 引言: 確定方法的執行時間對於性能優化至關重要。有多種方法可以測量此指標,每種方法都有其優點和缺點。 最佳方法:Stopwatch .NET 中的Stopwatch功能專門用於測量執行時間,被認為是最準確和最直接的方法。使用方法如下: var watch = Sy...
    程式設計 發佈於2025-02-06
  • 如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    [2使用內置的char_length()function。 char_length()和length() 此查詢將從指定的表中檢索所有行,並基於上升順序對它們進行排序指定列的字符長度。帶有更長字符串的行將出現在結果的底部。
    程式設計 發佈於2025-02-06

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

Copyright© 2022 湘ICP备2022001581号-3