#desktop-applications #webview #dioxus #virtual-dom #remote #bridge #instance

dioxus-webview

Dioxus 远程 Webview 实例的 VirtualDOM 渲染器

1 个不稳定版本

0.0.0 2021 年 2 月 28 日

#36#virtual-dom

MIT/Apache

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