[v10] 追踪 useLocalNodes 资源读取以缩小注册表订阅
作者: DennisSmolek创建于 2026年9月16日更新于 2026年9月16日
标签enhancementv10WebGPU
□ 总结
对#3888, 第2部分的执行后续: 自动订阅本地构成到他们实际读取的共享资源身份. 保持内置的创建者和范围搜索;呼叫者不应需要手动组装选择器或列出每个共享资源.
明确的依附-阵列后续手柄分别捕获了JavaScript建筑投入. 在#3888中,两个变化都无法单独解决图churn的两个原因.
□ 当前的行为和范围
在远程v10上验证,编号为979dc2d2e39cf0f87714a81f47ff19ade384fb:使用当地节点 ' 订阅整个统一'、节点'和文字 ' 登记册并加上`hmrVersion'。 不相干的资源注册可以让每个当地消费者重新回归并重建. " Creator State " 也暴露出缓冲器/存储器,没有相应的专用设备。
相关执行情况:
- “包装/纤维/弧/WebGPU/hoks/usenodes.tsx”
- “包装/纤维/弧/WebGPU/hoks/ScopedStore.ts”
- " 包装/纤维/螺旋/核心/功用/资源登记册 " (分阶段重叠和重建世代)
∮渴望的行为∮
时间轴 : Const 本地 = 使用本地节点( ({{制服,节点} ) ) ({{ 结果:节点.noise.mul(uniforms.scope ("表面").strength), ),[
这是`Nodes.noise'和`uniforms. sweet.strength'。 任何一条路径的替换或删除都会使其失效。 添加或替换不相关的资源不会。 改变现有的强度统一值并不能重建其消耗图.
这个例子中的阵列是拟议的明确依赖性API,而不是经过核实的修订时现有的API.
□ 建议的执行
扩大现有的范围包装,每次评价都进行读取跟踪。 记录登记类型、范围/关键路径、操作和被观测到的叶子身份/存在。 原样返回 三个节点,制服,纹理,和缓冲,不是其内部的深代.
在登记通知中,仅比较已承诺的依赖性数据集,并在这些依赖性保持不变时再使用缓存快照。 通过React的外存订阅语义集成. 第一次执行仍然可能收到广泛的Zustand通知:消除不必要的反应和图表重建是第一个目标。 如果计量证明合理,按键通知路由就是一种单独的优化。
覆盖所有接触到这些创造者的资源家族:制服,节点,缓冲器,gpuStorage,和纹理. 纹理访问是一幅由URL键入的地图(`textures.get(url)' /`has(url)'),需要一张有地图意识的读取外观;仅凭一个属性访问代理是不够的. 保存方法接收器和现有的公共API.
□ 依赖语义
行动
| -- -- -- -- -- -- --
此路径的“ nodes.noise” 身份,包括一个缺席条目。 |
QQ'uniforms.scope ("表面"). strength' QQ 叶子路径; 范围内不相干的变化不得使其失效. QQ
`. has(key)' 或`范围中的关键'`存在,而不是任意的其他条目。 |
`.keys()'/`object.keys(scope)' 范围
. . . . . . .内容来源: pmndrs/react-three-fiber