Dioxus:用 Rust 一套代码打通 Web / 桌面 / 移动的全栈框架
Dioxus用 Rust 一套代码打通 Web / 桌面 / 移动的全栈框架版本参考主线 README 0.7 正式发布说明2025-09交叉信源截止 2026-07核心观点Dioxus 的野心不是做一个更好的 Yew而是要复刻 React Native 在 JS 生态里扮演的角色——让 Rust 成为真正的全栈跨端语言。它的价值主张只有一句话写一份 Rust RSX 代码dx bundle出 Web / macOS / Linux / Windows / iOS / Android 六个目标产物。这件事在 2025 年前后才真正进入可用阶段属于从能跑到能用的关键跨越期不是范式突破但在 Rust 生态里是一次重要的渐进里程碑。对标系是 FlutterDart 跨端而非传统的 React/Vue。关键信息速览维度具体值语言纯 RustUI 层 后端逻辑UI 描述RSX 宏类 JSX 语法状态管理Signals细粒度响应式类 SolidJS后端集成深度 axum 集成Server Functions热更新dx serve --hotpatch0.7 新增subsecond 级别Web 包体积Hello World ~50 KB与 React 相当桌面包体积 5 MB渲染后端WebView稳定/ WGPU Blitz实验许可证MIT / Apache-2.0 双协议最核心的机制RSX 宏 Signals 的组合拳Dioxus 真正巧妙的地方不是跨端本身而是它如何让跨端在 Rust 里不显得别扭。RSX 是一个编译期宏把类 HTML 的声明式结构展开为纯 Rust 函数调用零运行时开销。这一点比 Yew 早期的虚拟 DOM 实现更激进——Yew 在浏览器里还要跑完整的 vdom diffDioxus 的 diff 发生在更细粒度的 Signal 订阅上。fn app() - Element { let mut count use_signal(|| 0); // Signal只有订阅了它的节点才会重渲 rsx! { h1 { High-Five counter: {count} } button { onclick: move |_| count 1, Up high! } button { onclick: move |_| count - 1, Down low! } } }use_signal的实现借鉴了 SolidJS 的细粒度追踪count变化时只有引用它的h1节点重新渲染而不是整棵组件树。这比 React 的 re-render 模型高效得多在列表密集场景下优势明显据 jishuzhan.net 的对比测试10 万条列表渲染 Dioxus 89ms vs Tauri/WebView 264ms。0.7 的 hot-patching是另一个机制亮点它通过显式的subsecond::call()同步点而非函数指针劫持来实现代码热替换这使得 TCP 连接、事件监听器等资源可以在 patch 前安全清理——这是对无状态重启热更和不安全内存 patch两种极端的折中工程上更务实。历史脉络与横向对比在 Rust UI 生态里可以这样排列Yew2018最早的 React-like 框架只做 Web虚拟 DOM编译产物重。Leptos2022专注 Web 全栈SSR 优先Signal 响应式Web 性能极佳但不做桌面/移动。Tauri2022Rust 后端 任意 Web 前端允许用 React/Vue/Svelte——让 Web 工程师渐进迁入生态最成熟打包体积最小7.2 MB vs Dioxus 11.8 MB。Dioxus2021~今全 Rust UI跨 Web/桌面/移动定位最激进。Dioxus 比 Tauri 好在哪里渲染性能Rust 控制整个 UI 层无 JS 桥、代码统一性一套语言无 IPC、状态管理一致性。Dioxus 比 Tauri 差在哪里生态Tauri 可直接用 npm 生态、招聘难度全团队必须会 Rust、系统级功能集成Tauri 有丰富插件、包体积大约大 60%。Dioxus 比 Leptos 的取舍Dioxus 选择广度跨端Leptos 选择深度Web SSR 极致优化。如果你只做 WebLeptos 的 SSR 能力更专业。我自己的推演接下来会怎样0.7 里 WGPU/Blitz 原生渲染器是一个值得重点观察的信号——一旦 Blitz 稳定Dioxus 就不再依赖系统 WebView彻底摆脱 Windows WebView2 版本碎片化、macOS WKWebView 样式限制等历史包袱这会让它在桌面端与 Flutter 形成真正的正面竞争。但这件事不会在 2026 年内完成。Blitz 目前的状态是CSS 布局有已知 bug、不支持所有 CSS 特性、JS 依赖页面无法处理离生产可用还有相当距离。保守估计 2027 年前WebView 仍是桌面 Dioxus 应用的主力渲染后端。边界与局限不该无条件鼓掌的地方移动端first-class有水分dx serve --platform android可以跑起来但 iOS/Android 的 Native UI 组件如原生导航栏、系统弹窗仍需手动调 JNI/Objective-C。移动体验与 Flutter 或 React Native 的成熟度有明显差距。热补丁有硬限制struct 字段变更后不自动迁移状态阻塞在 IO 的代码无法被 patch。在复杂业务逻辑里这意味着热更不总是无缝的。生态护城河薄UI 组件库数量远少于 Web 生态。官方的 Primitives 库仿 Radix UI只有 28 个基础组件距离生产级 Design System 还很远。团队门槛是真实约束Rust 的招聘难度是客观存在的。Tauri 允许前端工程师用已有 React 技能这一点在商业项目里往往比技术纯粹性更重要。50kb Hello World比较有误导性实际业务应用加上路由、状态、网络层后WASM 产物会快速增长。0.7 引入的 WASM Bundle Splitting 是正确方向但需要显式配置#[wasm_split]不是自动的。交叉验证信源 1jishuzhan.net《Tauri × Dioxus 架构对决》2026-05这篇文章提供了具体的性能基准数据打包体积、启动时间、内存占用、渲染性能与原文的宣传方向部分吻合但也揭示了原文未提及的短板✅ 认同Dioxus 渲染性能有优势10 万条列表 89ms vs Tauri 264ms✅ 认同一套 Rust 代码跨端是核心价值❌ 补充了原文回避的数据Dioxus 打包体积11.8MB比 Tauri7.2MB大约 65%内存占用 58MB vs 42MB冷启动 156ms vs 128ms❌ 明确指出设计工具集成弱、系统级插件不如 Tauri 完善这些原文完全未提及评价信源可信度中等数据来源未标注测试环境但量级符合预期具有参考价值信源 2DioxusLabs 官方 0.7 Release Blog2025-09-08这是官方一手资料直接证实并细化了原文的若干声明同时暴露了一些限制✅ 证实了热补丁功能确实在 0.7 落地且耗时近一年开发✅ 证实了 WGPU/Blitz 渲染器上线但明确标注work in progress❌ 官方亲口承认热补丁的三个硬限制struct 字段变更不自动迁移、依赖subsecond::call()同步点、阻塞 IO 无法 patch——原文 README 对此只字未提补充了 WASM Bundle Splitting、Stores 嵌套响应式状态等原文未详细说明的特性评价最可信的信源官方 changelog 对自身限制描述相当诚实值得直接参考。个人启发对 Rust 开发者如果你有用 Rust 写个小工具/面板的需求Dioxus 0.7 的入门体验已经足够顺滑dx serve热更 axum 后端集成是真实生产力。推荐从桌面端开始避开移动端的复杂配置。对决策者/技术 Leader在以下条件同时成立时才考虑 Dioxus① 团队已有 Rust 积累② 项目明确需要跨 Web 桌面两端③ 不急于上市生态还在成熟中。若只做 WebLeptos 更专业若有 Web 前端团队Tauri 更务实。对普通学习者Dioxus 是学习 Rust 响应式 UI 编程的极佳实战项目——RSX Signals 的心智模型比 React Hooks 更清晰官方文档质量相当高有 CI 保证文档与代码同步。延伸思考BlitzWGPU 渲染器一旦成熟Dioxus 与 Flutter 的竞争关系会如何演变Dart 和 Rust 在跨端 Native 渲染上的路线几乎相同但 Rust 的系统编程优势是否真的能转化为 UI 框架的胜势Subsecond 热补丁技术如果从 Dioxus CLI 剥离为独立 crate会对整个 Rust 开发工具链产生什么影响这可能是比 Dioxus 本身更有价值的副产品——给任意 Rust 应用带来接近动态语言的开发体验。全团队必须会 Rust这个门槛在 AI 辅助编码普及后是否会显著降低如果 LLM 能大幅降低 Rust 的上手成本Dioxus 当前最大的推广障碍会在多大程度上消失 参考来源GitHub - DioxusLabs/dioxus: Fullstack app framework for web, desktop, and mobile. · GitHub
