1 个不稳定版本
0.0.0 | 2021 年 2 月 28 日 |
---|
#36 在 #virtual-dom
15KB
149 行
Dioxus-webview
Dioxus-webview 将虚拟和 Webview DOM 结合起来,以创建简单、可移植的桌面应用程序。
Dioxus-webview 试图简化 "Tauri",使创建桌面应用程序与创建 .app 相同简单
// main.rs
#[async_std::main]
async fn main() {
dioxus_webview::new(|ctx| {
let (count, set_count) = use_state(ctx, || 0);
html! {
<div>
<h1> "Dioxus Desktop Demo" </h1>
<p> "Count is {count}"</p>
<button onclick=|_| set_count(count + 1) >
"Click to increment"
</button>
</div>
}
})
.configure_webview(|view| {
// custom webview config options
})
.launch()
.await;
}
然后创建一个原生 .app
dioxus bundle --platform macOS
目标
由于主机 VirtualDOM 在其自己的原生进程中运行,原生应用程序可以释放其全部潜力。Dioxus-webview 设计为 100% Rust 替代 ElectronJS,而不需要 ElectronJS 应用程序的内存开销或膨胀。
通过桥接原生进程,桌面应用程序可以访问完整的多线程功能、外围支持、硬件访问和原生文件系统控制,而无需烦恼于网络技术。我们的目标是使发布 Web 和原生应用程序变得简单,并快速看到性能的大幅提升,而无需重写整个堆栈。随着 dioxus 生态系统的增长,我们希望第三方提供支持 Web 和原生技术的存储、离线模式等的包装器。
技术
Dioxus-desktop 是一个纯 liveview 应用程序,其中所有状态和事件处理程序都通过 liveview 代理到原生进程。对于纯基于服务器的 liveview,这通常会太慢(在渲染性能和延迟方面),但由于 VDom 是本地的,桌面应用程序与 Electron 一样快。
Dioxus-desktop 在底层使用 dioxus-liveview,但提供了设置 VDom 桥接、代理事件和服务初始 WebSys-Renderer 的便利包装器。后端由 Tide 提供,因此需要一个异步运行时。
依赖
~12–24MB
~362K SLoC