设计取舍
前七部分按代码讲机制,每一章都顺带碰到一些「这样做换来了什么、付出了什么」。这一部分只有一页,把它们收到一起:每一条先说收益,再说代价,代价都配着本卷某一页上跑出来的现象,链接指向那一页,这里不重讲机制。和 React、Leptos、Sycamore 的对照只引 dioxus 自己的文档或通用常识,不比速度。只有一条(单线程渲染池里阻塞会挡住谁)这一页补了一个实验:页面请求和 server function 都要等,静态文件不受影响。
- 设计取舍:十三条取舍。编译期模板加虚拟 DOM,组件整个重跑、diff 只比动态部分;props 相等才跳过子组件,闭包和
children每次都重跑;Copy的 signal 把借用检查挪到运行期,值跟着 scope 回收;读时自动订阅,渲染时先读后写无限重跑且 0.7 无警告;hook、无 key 列表和水合数据都按位置认身份;渲染器只收指令,prevent_default只认同步部分;单线程运行时靠本地线程池;每个请求一个新VirtualDom;默认等所有 suspense 再发;server function 是公开端点;路由是编译期生成的枚举代码;热重载只在 debug 构建里。
flowchart TB upd[更新主线] --> m1["模板 重跑 signal hook"] first[首屏主线] --> m2["单线程池 每请求新建"] first --> m3["不流式 水合按槽位"] callm[调用主线] --> m4["server fn 即端点"] m1 --> m3 m2 --> m4 dbg["debug 构建"] --> m5["热重载代码"]
💬 关联讨论
发起讨论加载中...