全景
这一部分先回答「tauri 在 webview 和 Rust 之间加了什么」,再把启动主线和调用主线各从头到尾走一遍,后面各章都从这里出发。两个走读页都用同一个隐藏窗口的实验应用,打开 tracing feature,每一步打出时间和线程名。
- tauri 解决什么问题:README 里的「tiny, blazingly fast binaries」落在哪:系统 webview、自定义 scheme 提供页面、自定义 scheme 承载 IPC;分层图和 ACL 卡在 IPC 入口的位置;和 Electron、dioxus-desktop、直接用 wry 各差在哪;实验确认进程里没有一个网络套接字,WebKit 另起了三个辅助进程。
- 一次启动:启动主线逐步走一遍:
build只建事件循环、不建窗口,窗口在Ready时于applicationDidFinishLaunching里建好,再轮到用户的setup;四段初始化脚本按顺序挂出__TAURI_INTERNALS__的 11 个属性;tauri://localhost在主线程上收到、在 tokio 线程上取资源。 - 一次 invoke:调用主线逐步走一遍:两个随机回调 id、
fetch POST ipc://localhost/<cmd>、parse_invoke_request、on_message的 invoke key 和 ACL、同步命令在主线程而async命令在 tokio 线程;JS 和 Rust 两侧看到的头逐个对照;CSP 拦下fetch后悄悄退回postMessage。
flowchart TB why["tauri 解决什么问题"] --> launch["一次启动"] why --> invokepg["一次 invoke"] launch --> build["02 编译期"] launch --> rt["03 运行时"] launch --> app["04 应用与管理器"] launch --> wv["05 窗口与协议"] invokepg --> ipc["06 IPC"] invokepg --> sec["07 安全"]
💬 关联讨论
发起讨论加载中...