You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
AdLike2048/docs/方案-工作台性能隔离.md

2.6 KiB

方案:工作台性能隔离(全功能保留)

日期:2026-10-14
范围:仅 preview-template/ + 本文档

1. 目标

在保留层级 / 属性 / 点选 / 性能 / 资源 / 控制台 / 设备框等全部能力的前提下,让游戏主线程默认接近零开销,并支持一键「纯净测帧」。

同页同线程无法做到严格 0 影响;本方案用三层隔离逼近:

  1. 结构:壳 document ↔ 游戏 iframe(可跨域争取进程隔离)
  2. 行为:游戏内 Agent 默认休眠,按面板订阅激活
  3. 测帧:纯净测帧 → hibernate() 清空全部探针

2. 入口模式

URL 角色
/ 或无 pw 壳:停靠布局 + 面板 + Bridge;中央 iframe 加载游戏
?pw=game 游戏:引擎 + 设备框 + Agent(无工作台 DOM)

跨域策略:壳在 localhost 时,iframe 优先 127.0.0.1(互为不同 origin)。约 5s 未就绪或 agent.ready 失败则写入 sessionStorage.pw-cross-fail=1 并同域降级。

3. 文件

preview-template/
  index.ejs                 # data-pw=shell|game 双模式
  workbench/js/
    agent.js                # 游戏探针 RPC
    bridge.js               # 壳侧 postMessage / 同域快路径
    idle.js                 # requestIdleCallback 2ms 切片
    host.js                 # 仅壳:布局 + 订阅同步
    panels/*                # 仅壳:不直接碰 cc

4. 订阅与休眠

通道 激活条件 行为
perf 性能面板可见 采样(默认 500ms),壳侧 200ms 合并绘曲线
markers 随 perf scene/bundle 轮询
hierarchy 层级可见 指纹变化才推树
inspector 属性可见 按需 node.get/set
assets 资源可见 idle 切片枚举
console 控制台可见 hook + 100ms 合批
pick 检视模式 点选;选中后 ≤10fps 推 AABB

默认:无 interval、无 console hook、无 rAF、不 showStats。

5. 验收

  • 默认打开壳、不点面板:游戏 iframe 内 Agent 无定时器;开「纯净测帧」后帧耗时接近裸预览。
  • 只开性能 / 层级 / 控制台:仅对应通道有流量;关闭即停。
  • 跨域失败自动同域,功能仍可用。

6. 风险

  • Creator 预览可能只监听单一 host → 跨域失败属预期,走同域降级。
  • 壳页禁止执行 cocosTemplate(放入 <template>,仅 ?pw=game 激活)。双引擎会打崩 Electron/Cursor。游戏只在 iframe 内跑;默认同域嵌入。
  • 大场景层级序列化仍有成本 → 指纹跳过 + 仅可见时拉取。