mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 14:53:32 +08:00
问题(1M Text 节点实测): - v0 字体注册回调里全树改写 fontFamily:百万次 property.change 污染 dirty 集,打字场景退化 20s;单点改动 978ms - 公共 setter 路径(v2):百万次完整属性变更管线 = 2.2s 风暴 方案(v4): - 贡献者回记:commit 时合并累加每个 family 的贡献节点(不覆盖, 迟到 chunk 仍能找到贡献者),chunk 回调只把贡献者标脏——链应用 范围从全树缩小到实际用字节点,打字场景 O(1) - 静默/公共写分流:溢出(初始全量等贡献者>512)走静默写 __ 数据层 (~50ns/次,不触发事件不污染 dirty);少量贡献者走公共 setter (leafer 自动局部重绘该节点) - ready() 语义闭环:字体全部落地后同步消化残留 dirtyAll/renderPending, 否则会被下一个不相关的用户操作捡走——表现为「改一个字卡 800ms」 - forceRender 收敛:仅静默写/浏览器模式标记 renderPending,flush 尾部 无 in-flight chunk 时合并成一次执行 实测(1M Text,真实 leafer + 本地后端): - 单点改动 flush: 856ms → 0.15ms - 随机100节点 flush: 0.9ms - 新增 Text: 0.08ms - 打字同步按键成本: 0.2ms/次(与无插件基线 0.012ms 同数量级) - 拖拽等无文字变化操作: 0 请求 0 提交