这是一个从英文到中文的翻译,以下是对应的中文翻译:
Web到桌面框架对比
本仓库旨在对多个允许我们将Web应用程序转换为桌面应用程序的框架进行客观比较。
目录
主要特征
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI |
---|
Github stars | 113.1k | 80.6k | 40.2k | 23.8k | 8.8k | 7.4k | 163.9k | 21.9k |
Forks | 15.2k | 2.4k | 3.9k | 1.1k | 0.3k | 0.4k | 27k | 1.7k |
创建日期 | 2013 | 2019 | 2011 | 2019 | 2019 | 2018 | 2018 | 2020 |
最近更新 | 8/2024 | 8/2024 | 7/2024 | 8/2024 | 7/2024 | 8/2024 | 8/2024 | 8/2024 |
框架语言 | C++, JS, Objective-C, Python | Rust | C++ | Go | C++ | C++ | C, C++, Dart | C# |
后端语言 | JS, C++ | Rust | JS, C++ | Go | JS, C++ | JS, C++ | Dart | C# |
前端语言 | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | Dart | C# |
许可证 | MIT | MIT | MIT | MIT | MIT | MIT | BSD 3-Clause | MIT |
开发依赖 | Node.js, Electron NPM包 | C++编译器, Node.js, Rustc, Cargo | Node.js, NW.JS SDK | Go 1.18+, Node 15+, Wails | Cmake, make, Node.js, NodeGUI NPM包 | Node.js, Neu NPM包 | Flutter SDK, Visual Studio 2019 / Clang | .Net SDK, Visual Studio (可选), WebView2 (可选), Xcode (可选) |
用户依赖 | 无 | 无 | 无 | 无 | 无 | 无 | 无 | 无 |
依赖/模块支持 | npm和node.js原生插件 | cargo(后端), npm(前端) | npm和node.js原生插件 | Gomod (后端), npm (前端) | npm和node.js原生插件 | ❌ | pub.dev | NuGet |
引擎 | Chromium | WRY (WebKitGTK for Linux, WebKit for MacOS, Webview2 for Windows) | Webkit, Chromium | WebKit2gtk在Linux, Webview2在Windows, WkWebview在Mac | Qt | WebkitGTK+ | Flutter引擎 | .NET MAUI |
请参见GRAPHS.md以了解stars/forks可视化。
功能
前端框架/技术
| Electron | Tauri | NW.JS | NodeGui | Neutralino | Wails | Flutter | .Net MAUI |
---|
Angular | 是 | 是,通过Vite官方支持 | 是 | 是,社区支持 | 是 | 是 | 否 | 否 |
NextJS | ? | 是,官方支持 | ? | ? | ? | 是 | 否 | 否 |
Preact | 是 | 是,通过Vite官方支持 | 是 | ? | 是 | 是 | 否 | 否 |
Qwik | 是 | 是,官方支持 | 是 | ? | 是 | 是 | 否 | 否 |
React | 是 | 是,通过Vite官方支持 | 是 | 是,官方但已停止维护 | 是 | 是 | 否 | 否 |
Svelte | 是 | 是,通过sveltekit或Vite官方支持 | 是 | 是,官方支持 | 是 | 是 | 否 | 否 |
Vue | 是 | 是,通过Vite官方支持 | 是 | 是,官方支持 | 是 | 是 | 否 | 否 |
Vite | 是 | 是,官方支持 | 是 | ? | 是 | 是 | 否 | 否 |
操作系统支持
1: Linux 32位支持已停止
2: https://github.com/tauri-apps/tauri#platforms
3: 使用modes生成Web应用程序
基准测试
更多信息请查看 benchmarks.json。
注意: 这些基准测试是在GitHub CI上进行的。有更精确的测量方法(例如,多次运行),但它们永远不会完全准确,因为它们完全取决于系统负载和资源。您应该将这些表格视为同一OS、架构和应用程序之间框架的比较,有一定的误差范围。
01-empty-app
源码位于 benchmark/01-empty-app 文件夹。
构建大小
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈269MB | ≈1MB | ≈412MB | ≈8MB | ≈171MB | ≈2MB | ≈24MB | N/A1 | N/A2 |
Windows (x86) | ≈240MB | ? | ≈376MB | ? | ? | ? | ? | N/A1 | N/A2 |
Windows (ARM64) | ≈277MB | ? | 已申请 | ? | ? | ? | ? | N/A1 | N/A2 |
MacOS (x64) | ≈424MB | ? | ≈579MB | ? | ? | ≈1MB | ? | N/A1 | N/A2 |
MacOS (arm64) | ≈396MB | ≈3MB | ≈531MB | ≈6MB | ? | ≈2MB | ? | N/A1 | N/A2 |
Linux (x64) | ≈271MB | ≈2MB | ≈510MB | ≈7MB | ≈75MB | ≈1MB | ? | N/A1 | N/A2 |
Linux (x86) | ? | ? | ≈515MB | ? | ? | ? | ? | N/A1 | N/A2 |
Linux (ARMv7l) | ≈204MB | ? | 已申请 | ? | ? | ? | ? | N/A1 | N/A2 |
Linux (ARM64) | ≈276MB | ? | 已申请 | ? | ? | ≈1MB | ? | N/A1 | N/A2 |
构建时间
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈3114毫秒 | ≈180758毫秒 | ≈49016毫秒 | ≈5811毫秒 | ≈8292毫秒 | ≈232毫秒 | ≈33054毫秒 | N/A1 | N/A2 |
Windows (x86) | ≈3114毫秒 | ? | ≈49016毫秒 | ? | ? | ? | ? | N/A1 | N/A2 |
Windows (ARM64) | ≈3114毫秒 | ? | 有待更新 | ? | ? | ? | ? | N/A1 | N/A2 |
MacOS (x64) | ≈2672毫秒 | ? | ≈6288毫秒 | ? | ? | ≈329毫秒 | ? | N/A1 | N/A2 |
MacOS (arm64) | ≈2672毫秒 | ≈69209毫秒 | ≈6288毫秒 | ≈24327毫秒 | ? | ≈232毫秒 | ? | N/A1 | N/A2 |
Linux (x64) | ≈1865毫秒 | ≈210312毫秒 | ≈6017毫秒 | ≈28506毫秒 | ≈6322毫秒 | ≈232毫秒 | ? | N/A1 | N/A2 |
Linux (x86) | ? | ? | ≈6017毫秒 | ? | ? | ? | ? | N/A1 | N/A2 |
Linux (ARMv7l) | ≈1865毫秒 | ? | 有待更新 | ? | ? | ? | ? | N/A1 | N/A2 |
Linux (ARM64) | ≈1865毫秒 | ? | 有待更新 | ? | ? | ≈232毫秒 | ? | N/A1 | N/A2 |
内存使用 - (运行平均值) 主进程和子进程使用内存的中位数
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈336MB (调试) => ≈243MB (发布) | ≈335MB (调试) => ≈255MB (发布) | ≈109MB (调试) => ≈276MB (发布) | ≈404MB (调试) => ≈260MB (发布) | ≈204MB (调试) | ≈451MB (调试) => ≈415MB (发布) | ≈758MB (调试) => ≈57MB (发布) | N/A1 | N/A2 |
MacOS (arm64) | ≈410MB (调试) => ≈316MB (发布) | ≈187MB (调试) => ≈67MB (发布) | ≈554MB (调试) | ≈248MB (调试) => ≈72MB (发布) | ≈146MB (调试) | ≈127MB (调试) | ≈467MB (调试) | N/A1 | N/A2 |
Linux (x64) | ≈706MB (调试) => ≈589MB (发布) | ≈306MB (调试) => ≈92MB (发布) | ≈1GB (调试) => ≈854MB (发布) | ≈648MB (调试) => ≈434MB (发布) | ≈293MB (调试) | ≈996MB (调试) => ≈923MB (发布) | ≈506MB (调试) | N/A1 | N/A2 |
内存使用 - (运行平均值) 在执行之前和执行中系统测量的可用内存的差异中位数
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈159MB (调试) => ≈107MB (发布) | ≈227MB (调试) => ≈155MB (发布) | ≈73MB (调试) => ≈123MB (发布) | ≈266MB (调试) => ≈162MB (发布) | ≈172MB (调试) | ≈289MB (调试) => ≈259MB (发布) | ≈719MB (调试) => ≈37MB (发布) | N/A1 | N/A2 |
MacOS (arm64) | ≈153MB (调试) => ≈105MB (发布) | ≈153MB (调试) => ≈83MB (发布) | ≈252MB (调试) | ≈221MB (调试) => ≈86MB (发布) | ≈87MB (调试) | ≈113MB (调试) | ≈603MB (调试) | N/A1 | N/A2 |
Linux (x64) | ≈139MB (调试) => ≈97MB (发布) | ≈103MB (调试) => ≈21MB (发布) | ≈408MB (调试) => ≈199MB (发布) | ≈257MB (调试) => ≈167MB (发布) | ≈99MB (调试) | ≈504MB (调试) => ≈471MB (发布) | ≈404MB (调试) | N/A1 | N/A2 |
启动时间
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈558ms (调试) => ≈206ms (发布) | ≈2344ms (调试) => ≈415ms (发布) | ≈544ms (发布) | ≈7373ms (调试) => ≈407ms (发布) | ? | ? | ≈8597ms (调试) => ≈67ms (发布) | N/A1 | N/A2 |
MacOS (arm64) | ≈407ms (调试) => ≈242ms (发布) | ≈4152ms (调试) => ≈1856ms (发布) | ≈5532ms (调试) | ≈4674ms (调试) => ≈1774ms (发布) | ? | ≈1867ms (调试) | ≈30222ms (调试) | N/A1 | N/A2 |
Linux (x64) | ≈412ms (调试) => ≈265ms (发布) | ≈27272ms (调试) => ≈25756ms (发布) | ≈4155ms (调试) => ≈417ms (发布) | ≈2845ms (调试) => ≈242ms (发布) | ? | ≈504ms (调试) => ≈335ms (发布) | ≈28956ms (调试) | N/A1 | N/A2 |
1: 基准测试正在进行 (见 #319)
2: 基准测试正在进行 (见 #319)
02-empty-app-frameless
详见 benchmark/02-empty-app-frameless 文件夹中的源码。
构建大小
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈269MB | ≈1MB | ≈412MB | ≈8MB | ≈171MB | ≈2MB | N/A1 | N/A2 | N/A3 |
Windows (x86) | ≈240MB | ? | ≈376MB | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Windows (ARM64) | ≈277MB | ? | 已请求 | ? | ? | ? | N/A1 | N/A2 | N/A3 |
MacOS (x64) | ≈424MB | ? | ≈579MB | ? | ? | ≈1MB | N/A1 | N/A2 | N/A3 |
MacOS (arm64) | ≈396MB | ≈3MB | ≈531MB | ≈6MB | ? | ≈2MB | N/A1 | N/A2 | N/A3 |
Linux (x64) | ≈271MB | ≈2MB | ≈510MB | ≈7MB | ≈75MB | ≈1MB | N/A1 | N/A2 | N/A3 |
Linux (x86) | ? | ? | ≈515MB | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Linux (ARMv7l) | ≈204MB | ? | 已请求 | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Linux (ARM64) | ≈276MB | ? | 已请求 | ? | ? | ≈1MB | N/A1 | N/A2 | N/A3 |
构建时间
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈3002ms | ≈183969ms | ≈34344ms | ≈5889ms | ≈8387ms | ≈253ms | N/A1 | N/A2 | N/A3 |
Windows (x86) | ≈3002ms | ? | ≈34344ms | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Windows (ARM64) | ≈3002ms | ? | 已请求 | ? | ? | ? | N/A1 | N/A2 | N/A3 |
MacOS (x64) | ≈2764ms | ? | ≈7585ms | ? | ? | ≈345ms | N/A1 | N/A2 | N/A3 |
MacOS (arm64) | ≈2764ms | ≈68825ms | ≈7585ms | ≈24482ms | ? | ≈253ms | N/A1 | N/A2 | N/A3 |
Linux (x64) | ≈1616ms | ≈199940ms | ≈23780ms | ≈29409ms | ≈6455ms | ≈253ms | N/A1 | N/A2 | N/A3 |
Linux (x86) | ? | ? | ≈23780ms | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Linux (ARMv7l) | ≈1616ms | ? | 已请求 | ? | ? | ? | N/A1 | N/A2 | N/A3 |
Linux (ARM64) | ≈1616ms | ? | 已请求 | ? | ? | ≈253ms | N/A1 | N/A2 | N/A3 |
内存使用 - (运行平均值) 主进程和子进程的中位数内存使用
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈338MB (调试) => ≈239MB (发布) | ≈339MB (调试) => ≈254MB (发布) | ≈141MB (调试) => ≈272MB (发布) | ≈408MB (调试) => ≈262MB (发布) | ≈165MB (调试) | ≈455MB (调试) => ≈416MB (发布) | 不适用1 | 不适用2 | 不适用3 |
MacOS (arm64) | ≈411MB (调试) => ≈316MB (发布) | ≈184MB (调试) => ≈63MB (发布) | ≈602MB (调试) | ≈249MB (调试) => ≈73MB (发布) | ≈146MB (调试) | ≈125MB (调试) | 不适用1 | 不适用2 | 不适用3 |
Linux (x64) | ≈702MB (调试) => ≈585MB (发布) | ≈306MB (调试) => ≈93MB (发布) | ≈80MB (调试) => ≈853MB (发布) | ≈649MB (调试) => ≈435MB (发布) | ≈294MB (调试) | ≈995MB (调试) => ≈923MB (发布) | 不适用1 | 不适用2 | 不适用3 |
内存使用 - (多次运行的平均值 - 系统在执行前后测量的可用内存差值的中位数)
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈161MB (调试) => ≈52MB (发布) | ≈232MB (调试) => ≈152MB (发布) | ≈274MB (调试) => ≈124MB (发布) | ≈271MB (调试) => ≈163MB (发布) | ≈114MB (调试) | ≈278MB (调试) => ≈267MB (发布) | 不适用1 | 不适用2 | 不适用3 |
MacOS (arm64) | ≈182MB (调试) => ≈116MB (发布) | ≈127MB (调试) => ≈78MB (发布) | ≈244MB (调试) | ≈239MB (调试) => ≈86MB (发布) | ≈86MB (调试) | ≈110MB (调试) | 不适用1 | 不适用2 | 不适用3 |
Linux (x64) | ≈132MB (调试) => ≈97MB (发布) | ≈94MB (调试) => ≈21MB (发布) | ≈20MB (调试) => ≈197MB (发布) | ≈255MB (调试) => ≈166MB (发布) | ≈93MB (调试) | ≈501MB (调试) => ≈470MB (发布) | 不适用1 | 不适用2 | 不适用3 |
启动时间
| Electron | Tauri | NW.JS | Wails | NodeGui | Neutralino | Flutter | .Net MAUI | .Net MAUI w/ Vue |
---|
Windows (x64) | ≈565ms (调试) => ≈202ms (发布) | ≈2344ms (调试) => ≈414ms (发布) | ≈5810ms (调试) => ≈549ms (发布) | ≈7499ms (调试) => ≈408ms (发布) | ≈4268ms (调试) | ? | 不适用1 | 不适用2 | 不适用3 |
MacOS (arm64) | ≈362ms (调试) => ≈222ms (发布) | ≈3949ms (调试) => ≈1821ms (发布) | ≈5104ms (调试) | ≈4630ms (调试) => ≈1770ms (发布) | ? | ≈1863ms (调试) | 不适用1 | 不适用2 | 不适用3 |
Linux (x64) | ≈414ms (调试) => ≈260ms (发布) | ≈27287ms (调试) => ≈25750ms (发布) | ≈421ms (发布) | ≈2933ms (调试) => ≈244ms (发布) | ? | ≈508ms (调试) => ≈329ms (发布) | 不适用1 | 不适用2 | 不适用3 |
1: 尚不支持无框架模式
2: 无框架模式无法工作
3: 无框架模式无法工作
未来内容
请查看 Issues 和 Pull requests。您可以通过提出新的 issues 或填写它们来参与。
贡献者
贡献者列表