最近在看rust前端GUI框架,不看不知道,一看吓一跳,原来跨平台已经这么卷了。除了Flutter、React native、Electron、Uni-app,rust带了一堆小猴子们来搅局了。都在发力跨平台应用开发,看来开发者们都比较看好rust在应用上的表现。
Slint

Slint是一个声明式的GUI工具包,用于为Rust、C++或JavaScript应用程序构建本地用户界面。
跨平台支持情况:
Embedded: 嵌入式设备 支持 300KB内存即可
Desktop: Windows Linux Mac 开发中
Web: 开发中
Mobie: Android 开发中 IOS 待安卓开发完成启动
当前版本1.3.2
Tauri

Tauri是一个为所有主要桌面平台构建微小、快速二进制文件的框架。开发人员可以集成任何可编译为HTML、JS和CSS的前端框架来构建用户界面。应用程序的后端是一个带有API的rust-sourced二进制文件,前端可以与之交互。
Tauri应用程序中的用户界面目前将tao作为macOS、Windows、Linux、Android和iOS上的窗口处理库。为了呈现应用程序,Tauri使用WRY,这是一个为系统webview提供统一接口的库,利用macOS和iOS上的WKWebView、Windows上的WebView2、Linux上的WebKitGTK和Android上的Android系统webview。
跨平台支持情况:
Embedded: 不支持
DeskTop: Windows、macOS、Linux 支持
Web: 支持
Mobile: Android iOS/iPadOS alpha 版 未发布正式版
Iced

基于Rust的跨平台GUI库专注于简单性和类型安全性。灵感来自Elm。
跨平台支持情况:
Embedded: 不支持
DeskTop: Windows、macOS、Linux 支持
Web: 支持
Mobile: Android iOS/iPadOS 不支持
Yew

Yew是一个现代的Rust框架,用于使用WebAssembly创建多线程前端web应用程序。具有一个宏,用于声明带有Rust表达式的交互式HTML。有在React中使用JSX经验的开发人员在使用Yew时应该会感到宾至如归。通过最小化每个页面呈现的DOM API调用,并使处理轻松地卸载到后台web工作人员,实现了高性能。
支持JavaScript互操作性,允许开发人员利用NPM包并与现有的JavaScript应用程序集成。
目前仅看到支持web端
Leptos

Leptos是一个全栈、同构的Rust web框架,利用细粒度的反应性来构建声明性用户界面。
目前仅看到支持web端
Dioxus

Dioxus是一个便携式、高性能和符合人体工程学的框架,用于在Rust中构建跨平台用户界面。
跨平台支持情况:
Embedded: 不支持
Desktop: Windows、macOS、Linux 支持
Web: 支持
Mobile: Android iOS 支持
此外Dioxus还支持Liveview和Terminal
从官网来看很优秀,Desktop当前版本是基于Tauri实现的,未来规划使用自己的渲染器。Mobile的动画支持还很有限,适合不关注动画和本机组件的应用,比如就想写个crud快速演示下。目前和Tauri对手机端的支持情况半斤八两,都有各种问题。这么看来回归正统的移动端跨平台开发还得用flutter。在web和桌面应用开发上相对比较成熟。
跨平台使用体验
我选择Dioxus作为全栈开发的第一只螃蟹,使用官网的源码作为示例项目,几经周折,终于是把项目跑起来了,体验还不错。

响应式布局体验也还可以,没有细究如何实现的响应式,运行在wasm模式下,包大小有点吓人,从开始编译时就感觉这个项目很大600+的依赖,耗时长的我一度想放弃,半夜三更爬起来看看运行情况,经常网络超时导致安装中断,相当痛苦。
实际耗时远远大于最终编译时间,做好一天连个包都安装不完的准备。真的痛苦。安装完包我以为一条命令会启动,没想到卡了好久,一直卡的我怀疑人生,最终还是功夫不负有心人,坚韧不拔的跑起来了。

88.9M的包对一个前端项目来说着实不小了

按照官方介绍这个源码是支持桌面的,我本地环境无法唤起桌面可能我自行升级的包和桌面有兼容问题了,只能使用官方最简单的Demo体验下。

移动端官方只放出了ios的Demo,我本机只装了Android的虚拟机,暂无法实际体验,感兴趣的可自行去官网体验。
表格小结
|
Web
|
Desktop
|
Mobile
|
embed
|
Slint
|
Y
|
Y
|
Y
|
Y
|
Tauri
|
Y
|
Y
|
Y
|
X
|
Iced
|
Y
|
Y
|
X
|
X
|
Yew
|
Y
|
X
|
X
|
X
|
Leptos
|
Y
|
X
|
X
|
X
|
Dioxus
|
Y
|
Y
|
Y
|
X
|
小结
Slint看似支持的挺全乎,在对嵌入式的支持上一枝独秀,对移动端支持还没有预览版,嵌入式使用GPLv3开源协议使用是需要专利授权的。我这穷屌丝只能敬而远之。实际能体验移动端跨平台的目前只有Tauri和Dioxus,其它几个中的Leptos在web端还是很优秀的,以速度著称。
dioxus对嵌入式是部分支持,即满血版的linux或者windows可以支持,其它均不支持,Mobie的支持仅仅停留在体验阶段,和Tauri一样俩框架都有bug,仅仅是个开始阶段甚至连个正式版都还没有,在移动端还打不过发展了很多年都已经迭代到3.X版本flutter,在桌面和web端预测会有一席之位。接下来的几年会跨平台应用开发框架大乱斗,对于当前rust是体验不够全栈来凑,没有最卷,只会更卷。