mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
全量 walk O(全树) 改为事件驱动增量: - property.change 携带 target(PropertyEvent 五参构造)→ 精确记脏节点 - child.add/remove 携带 child → 整棵子树入脏集(构造期赋值不走 setAttr) - 订阅集与 Leafer 自家 Watcher 相同(property.change + child.*), 渲染可靠 = 事件可靠;不再订阅 layout.end(每帧触发,百万级下 周期性全量 walk 是持续卡顿源) - 脏节点 >512 退化全量(模板整体替换场景全量更省) - 全量/增量共用 collect/walkInto/commit,指纹短路保证无变化时 update 调用归零 - 新增 provider 透传(测试/私有部署)、flushNow(跳过防抖立即提交)、 updateCalls 计数(量化指纹短路效果) 压力测试(_prof_million.entry.ts,1M Text 节点): - 初始全量 scan: ~580ms(一次性) - 打字稳态(emit+flush): 0.024ms/键 - 无文字变化 flush ×100: 0.16ms,update=0 - 内存: 指纹表 O(family 数),与节点数无关 真实 leafer 验证(scripts/test-leafer-incremental.mts): 初始添加/改文字/新增子树全自动捕获,拖拽 50 次 0 请求 0 提交。 附带修复 dev 后端启动:llrt_lr.ts 改动态 import + fsReady (createRequire 与 tsx ESM loader 模块图隔离导致 implInterface 注册到孤儿实例,mkdir undefined)。