文档更新: 补充性能优化与防御性增强的说明

- UPDATE_LOG.md: 新增 2026-03-04 性能优化章节(JSON压缩、队列限制、子节点上限)

- 注意事项.md: 补充队列长度限制(100/429)和子节点上限(50/childrenTruncated)说明

- README.md: 更新并发安全特性描述和 get_scene_hierarchy 参数说明
This commit is contained in:
火焰库拉
2026-03-04 09:35:03 +08:00
parent f7b39b2f58
commit fb4025e50b
3 changed files with 25 additions and 2 deletions

View File

@@ -410,3 +410,24 @@
- **验证**: 创建的预制体文件结构与编辑器原生拖拽创建的预制体完全一致,可正常打开编辑、实例化使用,控制台零报错。
ps: 感谢 @亮仔😂 😁 🐔否? 提供的反馈以及操作日志
---
## 性能优化与防御性增强 (2026-03-04)
### 1. JSON 响应压缩输出 (`src/main.js`)
- **问题**: MCP 工具调用返回结果时使用 `JSON.stringify(result, null, 2)` 格式化输出,凭空增加约 20-40% 的响应体积,消耗额外 Token 且对 AI 工具毫无意义。
- **修复**: 移除缩进参数,改为 `JSON.stringify(result)` 压缩输出。
- **效果**: 响应体积减少 20-40%,直接降低 AI 模型的 Token 消耗成本。
### 2. 指令队列长度限制 (`src/main.js`)
- **问题**: `commandQueue` 数组无最大长度限制,理论上在极端情况下可能无限增长。
- **修复**: 新增 `MAX_QUEUE_LENGTH = 100` 常量。`enqueueCommand` 入口检查队列长度,超限时直接 reject 并返回 HTTP 429 状态码,同时记录告警日志。
- **保护**: 在 `enqueueCommand` 调用处补充 `.catch()` 处理 reject确保 HTTP 响应正常关闭,避免 unhandled promise rejection。
### 3. 层级树子节点数量上限 (`src/scene-script.js`)
- **问题**: `get-hierarchy``dumpNodes` 递归遍历子节点时无数量限制,若某个节点下有数百个同级子节点,返回数据量巨大。
- **修复**: 新增 `MAX_CHILDREN_PER_LEVEL = 50` 安全上限。每层最多返回 50 个子节点,超出部分在返回数据中通过 `childrenTruncated` 字段标注被截断的数量,帮助 AI 知悉还有更多子节点未列出。

View File

@@ -132,6 +132,7 @@
1. 队列在 `processNextCommand``catch` 块中有防死锁保护,即使某个指令抛出异常也不会永久阻塞后续指令。
2. `batchExecute` 内部也已从并行 `forEach` 改为串行链式执行。
3. 队列长度会在日志中显示(`REQ -> [toolName] (队列长度: N)`),可用于排查积压问题。
4. **队列长度限制**:队列上限为 100 条。超限时新请求会被直接拒绝并返回 HTTP 429 状态码,防止极端情况下内存无限增长。
### 9.2 `refresh_editor` 路径要求
@@ -153,6 +154,7 @@
- **最佳实践**
- **默认使用 `depth: 2`** (默认限制) 来逐步探查。
- **结合 `nodeId` 参数**:找到关键模块(例如 `Canvas/LoginPanel`)的 UUID 后,再单独向该 `nodeId` 请求下一层的结构,而非每次从根部拉取。
- **子节点数量上限**:每层最多返回 50 个子节点。如果某节点的子节点数超过 50返回数据中会包含 `childrenTruncated` 字段标注被截断的数量。此时可通过 `nodeId` 参数指定该节点单独获取完整子节点列表。
### 10.2 大对象与长数组截断