Rust in Everything
基于 tauri 2.12.5

设计取舍

前七部分按代码讲机制,每一章都顺带碰到一些「这样做换来了什么、付出了什么」。这一部分只有一页,把它们收到一起:每一条先说收益,再说代价,代价都配着本卷某一页上跑出来的现象,链接指向那一页,这里不重讲机制。对照的对象有三个:tauri 1.x(读 tauri-v1.8.3 的源码)、同样基于 wry / tao 的 dioxus-desktop(读 dioxus v0.7.10 的源码)、已经发了 alpha 的 3.x(只读它的 CHANGELOG)。这一页补了一组实验:同一个页面分别用 tauri、裸 wry + tao、dioxus-desktop 写一遍,比二进制大小、启动到第一次往返的时间、内存和监听的端口。

  1. 设计取舍:八条取舍。系统 webview 让 release 二进制只有 9.4 MiB(按 tauri 自己的发布配置 2.9 MiB),比裸 wry 大约 8 MiB、启动只慢几十毫秒,内存的大头是系统的三个 WebKit 进程,代价是三个平台行为不一;页面和 IPC 走自定义 scheme,进程里没有一个网络套接字;IPC 用 fetch,1.x 的 postMessage + eval 留作退路,两条路语义不同;JSON 是默认编码,事件是一段 eval;ACL 从 1.x 的 Cargo feature 变成编译期解析的表;R: Runtime 换来 MockRuntime;窗口和 webview 拆开;和 dioxus-desktop 逐项对照;3.x alpha 的方向。
flowchart TB
  launch[启动主线] --> m1["系统 webview 自定义 scheme"]
  callm[调用主线] --> m2["fetch 与退路 JSON 编码"]
  callm --> m3["编译期 ACL"]
  evt[事件主线] --> m4["事件是 eval"]
  all[横跨三条] --> m5["R Runtime 窗口与 webview"]
  m1 --> cmp["对照 1.x dioxus 3.x"]
  m3 --> cmp
  m5 --> cmp

💬 关联讨论

发起讨论
加载中...