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

62 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Node 节点优化计划
### 阶段一:内存布局与数据结构优化
#### 1.1 成员变量重排(减少内存占用)
- **目标**: [node.h](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/include/extra2d/scene/node.h) 和 [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**: 按类型大小降序排列成员变量,减少内存对齐填充
- **预期收益**: 减少约 16-32 字节内存占用
#### 1.2 子节点查找优化(哈希索引)
- **目标**: [node.h](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/include/extra2d/scene/node.h) 和 [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.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.h](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/include/extra2d/scene/node.h) 和 [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**:
- 使用 `std::unordered_map<int, Ptr<Action>>` 替代 `std::vector` 存储带 tag 的 Action
- 使用侵入式链表管理 Action 更新顺序
- **预期收益**: Action 查找和删除从 O(n) 优化到 O(1)
### 阶段三:变换计算优化
#### 3.1 世界变换迭代计算
- **目标**: [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**:
-`getWorldTransform()` 的递归改为迭代实现
- 使用栈结构收集父节点链
- **预期收益**: 避免深层级节点的栈溢出风险,减少函数调用开销
#### 3.2 矩阵计算优化
- **目标**: [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**:
- 优化 `getLocalTransform()` 中的矩阵构造顺序
- 延迟计算 skew 矩阵(仅在需要时)
- **预期收益**: 减少不必要的矩阵乘法
### 阶段四:渲染与批量操作优化
#### 4.1 渲染命令收集完善
- **目标**: [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**:
- 完善 `collectRenderCommands` 实现
- 添加 Z 序累积和递归收集
- **预期收益**: 支持多线程渲染命令收集
#### 4.2 批量操作接口
- **目标**: [node.h](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/include/extra2d/scene/node.h) 和 [node.cpp](file:///c:/Users/soulcoco/Desktop/Easy2D/Extra2D/Extra2D/src/scene/node.cpp)
- **内容**:
- 添加 `addChildren(std::vector<Ptr<Node>>&& children)` 批量添加
- 优化 `removeAllChildren` 使用批量处理
- **预期收益**: 减少多次操作的开销
---
**预计总工作量**: 4-6 小时
**优先级**: 高1.1, 1.2> 中2.1, 3.1> 低3.2, 4.1, 4.2