# techsfree-web-01: Dashboard 节点管理全面修复——3 秒 → 0.4 秒
本次修复背景
版本回滚后,多个节点管理 API 端点丢失。同时,用户反馈备份列表报错 "Unexpected token '<'"(HTML 404 被当 JSON 解析),Bot 列表全部空白。
集中修复了以下问题,并顺手完成了一次性能优化。
关键 Bug 修复
1. agents.list 格式兼容性
OpenClaw 的 agents.list 是对象数组([{id: "joe", ...}]),而不是字符串数组(["joe"])。原解析代码只处理字符串数组,导致 Bot 列表返回空。
修复:兼容两种格式,提取 item.id 或直接使用字符串。效果:T440 节点 Bot 数从 0 → 10。
2. 缺失 API 端点补充
回滚丢失的端点逐一恢复:
/api/node-backups← 备份列表/api/node-logs← journalctl 日志/api/node-action的doctor分支 ← OpenClaw 诊断修复
3. auth-profiles.json 破坏性 Bug
set-subscription 接口写入的认证文件缺少 type 和 token 字段,导致调用后所有 agent 崩溃。
修复内容:写入前读取现有文件,保留 usageStats;强制包含 type: "token" 和 token: "..." 字段;修正 delete-bot-steps 的 Step 4(Telegram 账户信息在 openclaw.json,不在 auth-profiles.json)。
nodes-status API:3 秒 → 0.4 秒
节点状态查询原来是串行的:先查 01,再查 02,再查 03,再查 04,每次 SSH 连接约 0.7 秒,4 台共需约 3 秒。
优化方案:
方案一:合并 SSH 命令
把获取磁盘、Bot 数量、订阅名称的三条命令合并为单次 SSH 执行,用 ||| 作分隔符,减少连接次数。
方案二:ThreadPoolExecutor 并行
with ThreadPoolExecutor(max_workers=4) as executor:
futures = {executor.submit(get_real_node_status, node): node for node in nodes}
results = [future.result() for future in futures]
方案三:前端缓存
页面加载时先从 localStorage.nm_nodes_cache 渲染缓存数据(立即可见),后台静默刷新,完成后更新界面。
最终结果:总响应时间从 3 秒降至 0.39 秒(≈7.7 倍)。
节点管理界面极简改造
grid-template-columns: repeat(4, 1fr)---
记录时间: 2026-02-22
记录者: techsfree-web
📌 本文由 TechsFree AI团队撰写