🧠 核心原理
MeshFlow 的核心目标是将复杂的异步联动转化为确定的原子更新。为了实现这一目标,引擎底层依赖四大核心机制。
1. 层级拓扑引擎 (Layered DAG)
解决痛点:钻石依赖导致的重复计算
在复杂的依赖网格中,经常会出现“钻石依赖”结构:节点 A 同时影响 B 和 C,而 B 和 C 又共同指向 D。在传统的监听模式下,A 的变动会导致 D 被触发两次。
实现逻辑
MeshFlow 在节点注册阶段会构建一个 有向无环图 (DAG),并对所有节点进行 层级排序:
- 深度分析:统计每个节点在拓扑序里的层级。
- 层级执行:引擎确保只有在第
N层的所有节点计算完成后,才会开始第N+1层的计算,避免节点抢跑
结果:无论依赖路径多复杂,D 永远只会在 B 和 C 都准备好后,执行一次“原子更新”。
2. 水位线调度 (Watermark)
解决痛点:复杂拓扑中的“版本失步”
在拓扑计算中,节点往往拥有多个上游。当部分上游触发异步更新,而另一部分上游保持静默时,下游节点如何判断当前各个上游的数据是否已经“对齐”到同一个逻辑周期?
实现逻辑:逻辑时钟与提交拦截
MeshFlow 引入了基于逻辑周期的水位线机制:
- 逻辑时钟同步:每当根节点触发变更,引擎会检查
Watermark水位线。水位深度会随拓扑路径向下游传播,作为该次变更的“合法身份证明”。 - 状态可信度校验:阻塞与等待:如果某个上游节点处于“计算中”且水位未对齐,下游节点将保持挂起状态,直到所有依赖项的有效性得到确认
结果:彻底解决了“脏读”问题。确保每个节点在执行 logic 回调时,其获取到的上游数据在逻辑时间轴上是完全对齐的。
3. 智能变更追踪 (Smart Change Tracking)
解决痛点:冗余计算与无效传播
在大型网格中,并非每次上游变动都需要下游重新执行逻辑。如果 $A$ 变了但 $B$ 的计算结果没变,那么 $B$ 之后的所有下游都不应该被触发。
实现逻辑:记忆化与自动剪枝
MeshFlow 引入了高效的“桶计算”与路径截断机制:
- 惰性求值 (Memoization):通过比对输入特征桶(Input Buckets),仅在依赖项发生实质性变更时才触发
logic重算。 - 变更剪枝 (Pruning):即便节点处于受影响路径上,若其计算结果未通过有效性检查(即输出未改变),引擎将自动截断该路径,停止向下游传播。
结果:实现了真正的“计算最小化”,确保每一度 CPU 算力都花在必要的逻辑变更上。
4. 实时环路熔断 (Cycle Detection)
解决痛点:逻辑死循环
在手动编写联动时,很容易出现 A -> B -> A 的死循环,导致浏览器崩溃。
实现逻辑
引擎在 SetRule 建立连接的瞬间,会以该路径为起点进行一次一次 $O(V+E)$ 复杂度的深度优先搜索(DFS):
- 静态检测:在节点定义阶段而非运行阶段识别环路。
- 即时报错:一旦检测到路径闭环,立即抛出清晰的路径追踪错误,防止非法逻辑进入生产环境。