Extra2D/.trae/documents/Node 节点优化计划.md

3.0 KiB
Raw Blame History

Node 节点优化计划

阶段一:内存布局与数据结构优化

1.1 成员变量重排(减少内存占用)

  • 目标: node.hnode.cpp
  • 内容: 按类型大小降序排列成员变量,减少内存对齐填充
  • 预期收益: 减少约 16-32 字节内存占用

1.2 子节点查找优化(哈希索引)

  • 目标: node.hnode.cpp
  • 内容:
    • 添加 std::unordered_map<std::string, WeakPtr<Node>> nameIndex_
    • 添加 std::unordered_map<int, WeakPtr<Node>> tagIndex_
    • 修改 addChild/removeChild 维护索引
  • 预期收益: getChildByName/getChildByTag 从 O(n) 优化到 O(1)

阶段二Action 系统优化

2.1 Action 存储优化

  • 目标: node.hnode.cpp
  • 内容:
    • 使用 std::unordered_map<int, Ptr<Action>> 替代 std::vector 存储带 tag 的 Action
    • 使用侵入式链表管理 Action 更新顺序
  • 预期收益: Action 查找和删除从 O(n) 优化到 O(1)

阶段三:变换计算优化

3.1 世界变换迭代计算

  • 目标: node.cpp
  • 内容:
    • getWorldTransform() 的递归改为迭代实现
    • 使用栈结构收集父节点链
  • 预期收益: 避免深层级节点的栈溢出风险,减少函数调用开销

3.2 矩阵计算优化

  • 目标: node.cpp
  • 内容:
    • 优化 getLocalTransform() 中的矩阵构造顺序
    • 延迟计算 skew 矩阵(仅在需要时)
  • 预期收益: 减少不必要的矩阵乘法

阶段四:渲染与批量操作优化

4.1 渲染命令收集完善

  • 目标: node.cpp
  • 内容:
    • 完善 collectRenderCommands 实现
    • 添加 Z 序累积和递归收集
  • 预期收益: 支持多线程渲染命令收集

4.2 批量操作接口

  • 目标: node.hnode.cpp
  • 内容:
    • 添加 addChildren(std::vector<Ptr<Node>>&& children) 批量添加
    • 优化 removeAllChildren 使用批量处理
  • 预期收益: 减少多次操作的开销

预计总工作量: 4-6 小时 优先级: 高1.1, 1.2> 中2.1, 3.1> 低3.2, 4.1, 4.2