当前位置:网站首页>tauri vs electron
tauri vs electron
2022-06-26 12:38:00 【云满笔记】
1. tauri vs electron
1.1. Tauri 是什么
Tauri 是一个跨平台 GUI 框架,与 Electron 的思想基本类似。Tauri 的前端实现也是基于 Web 系列语言,Tauri 的后端使用 Rust。Tauri 可以创建体积更小、运行更快、更加安全的跨平台桌面应用。
1.2. 前端看法
tauri 这个时候火是要带这个时间点的背景来看的,其中我认为最重要的 2 点是 rust 和 webview2。
rust
- rust 多受欢迎这里不多表述,仅抛几个链接,linux 内核接纳 rust, deno 采用 rust, 微软拥抱 rust, fuchsia 的 rust 代码占比超 50%, Apple 在底层 all-in rust, 连续 6 年的 stackoverflow 最受欢迎语言。
- tauri 采用的 rust 对应了 electronjs 的 nodejs, 没有 nodejs 这个 runtime, 也就更薄。nodejs 的最大优势是异步事件驱动 libuv 和 js 语言。rust 基于 future 的 tokio 等库有得一比,(且熟悉的 async await 开箱可用)。rust 强烈拥抱 wasm 对各端语言的开发者诱惑力很大。
- rust 被很多开发者定位为系统编程,对系统 api 的集成和调用优势很大。
- rust 还有满多优势:编译期内存安全、零成本抽象、支持高并发、丰富类型系统、易用的 cargo 包管理、ffi 编译友好(和 node-gyp 比更友好)
- 缺点是学习门槛高,但对于 c/c++开发者而言包管理、标准库、编译期内存安全等诱惑力十足。
webview2
- tauri 使用的渲染库 wry 在 macos 下采用 Webkit.framework, 在 windows 下采用了 webview2。
- 微软对 webview2 runtime 的支持力度比较大。为提升 office 应用、outlook 等的体验,2021 年 4 月开始对 windows 2101 版本以上进行推送。具体覆盖率数据目前不清楚(看有没哪位大神可以透露下)。
- 不同应用可以共享 webview2。electronjs 想实现的共享运行时被 webview2 实现了。
- webview2 runtime 122MB, win11 预装了,win11 之前的版本可以内嵌到应用的安装包,可以复用非稳定版 edge 浏览器的 runtime(稳定版不复用), 也可以单独下载(推荐,这样不同 tauri 应用可以共享 runtime)。
- webview2 runtime 的常青模式甚至可以做到比 electronjs 的 chromium 更新更快。
- 微软内部桌面应用逐渐从 electron 切换到 webview2。
总而言之 tauri 是卡着时间点的框架,是桌面应用螺旋形上升发展的一个现象级框架。
1.3. 开源项目作者看法
作为 Electron 的替代方案,这类的框架越来越多,tauri 只是其中之一,他们都尝试解决 Electron 的两个比较明显的的问题:
- 包太大,因为 electron 会自动塞入 Chromium 和 nodejs, 一个什么也不做的 electron 项目压缩后也大概要 50m。
- 内存消耗过大,因为 Chromium 本身就很吃内存,再加上提供操作系统访问能力的 nodejs, 很可观的内存消耗,对小工具类的项目不友好。
tauri 看了一下,不再塞入 Chromium 和 nodejs, 前端使用操作系统的 webview, 后端和操作系统集成这块使用 rust 实现,理论上应该比 nodejs 要精简高效,类似的项目还有:
- NeutralinoJS 前端嵌入一个 webview, 后端直接实现一个 c++ 实现的 http server。
- Chromely 前端嵌入一个 CEF, 后端使用 .NET。
- electrino 和 tauri 类似,使用系统的 webview, 并实现一个后端 (windows 下似乎也是基于 .NET)。
- go-astilectron 仍然基于 Electron, 但后端换成 go 语言。
- wails webview+go 的后端
但是这类项目的问题都在于:不成熟,基本上看下文档就知道了,作为开发桌面应用的方案,操作系统访问的 api 很少,甚至不具备 ( 或者是没有写文档?), 很难用于开发正式的项目,但是值得关注,一旦成熟起来,替代 Electron 就大有希望。
边栏推荐
- .NET MAUI 性能提升
- The El form item contains two inputs. Verify the two inputs
- Processsing 鼠标交互 学习
- P2393 yyy loves Maths II
- 第01章_Linux下MySQL的安装与使用
- 数字信号处理——线性相位型(Ⅰ、Ⅲ型)FIR滤波器设计(1)
- [geek challenge 2019] rce me 1
- 由错误<note: candidate expects 1 argument, 0 provided>引发的思考
- 自定义封装下拉组件
- Several methods added to the ES6 array (foreach, filter, some, every. Includes, reduce)
猜你喜欢

This function has none of deterministic, no SQL solution

NoSQL mongodb - 02 mongodb server installation, mongodb shell, basic concepts and visualization tools

小白懒人专用-win10-win11一键安装版

processsing 函数random

【网络是怎么连接的】第二章(中):一个网络包的发出

P2393 yyy loves Maths II

Echart堆叠柱状图:色块之间添加白色间距效果设置

轻流完成与「DaoCloud Enterprise 云原生应用云平台」兼容性认证

Less than 40 lines of code to create a blocprovider

计组实践实验9——使用CMStudio设计基于分段模型机微程序指令(2)
随机推荐
机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)
不到40行代码手撸一个BlocProvider
Source code learning: atomicinteger class code internal logic
【网络是怎么连接的】第一章:浏览器生成消息
心脏滴血漏洞(CVE-2014-0160)分析与防护
计组实践实验9——使用CMStudio设计基于分段模型机微程序指令(2)
一个快速切换一个底层实现的思路分享
JS get the current screen height method and listen for DOM elements to enter the viewport
软件测试测试常见分类有哪些?
自定义封装下拉组件
Several rare but useful JS techniques
KITTI Detection dataset whose format is letf_top_right_bottom to JDE normalied xc_yc_w_h
MySQL 自定义函数时:This function has none of DETERMINISTIC, NO SQL 解决方案
Tiger Dao VC products are officially launched, a powerful supplement to seektiger ecology
【网络是怎么连接的】第二章(中):一个网络包的发出
洛谷P3426 [POI2005]SZA-Template 题解
el-form-item 包含两个input, 校验这两个input
LeetCode_栈_中等_150. 逆波兰表达式求值
详细实操分享,下班刷了两小时的搞笑视频,一个月收益7000多
postgis计算角度