refactor(core): [CORE-22] validate compatible core and defer initial layout

This commit is contained in:
Harvey Zhao committed 2026-09-11 23:18:12 +08:00
1 parent 5efc7f7699
commit adec20213f
24 files changed
+77377 -50

No files matched your search

+23
View File
@@ -33,3 +33,26 @@ scripts/build-analysis.mjs 负责报告;projects.js 解析只对 build 有效
目录迁移会改变分组,例如 display 从旧 player 中移出,不能只按新目录的正增量计算功能成本。当前最大源码模块是 setting/render.ts,报告中的模块 code 为 11933 UTF-8 字节;Rollup 记录的渲染长度为 11598 代码单元。后续审查应结合它的失败回滚、更新冲突、挂载回调和焦点契约,不能为减小体积删除已有回归所保护的路径。
没有发现 TS、c8、Playwright 或 Vite 运行时进入核心产物。此轮仅完成归因工具和证据,尚未优化生产行为;ENG-PERF-01/02 保持 open,CORE-22 继续审查可避免的开销和构造耗时。不要把解释了来源等同接受了全部成本。
## CORE-22 构造/销毁热点定位
使用固定 Node 和已有 Playwright,运行 `node refactor/scripts/profile-core-layout.mjs`。
它启动自身拥有的 8086 本地测试服务和 headless Chromium,加载当前源码的未压缩构建,
先预热 10 次,再对 60 次构造、真实本地视频 ready/play/首个解码帧及销毁进行 CPU 采样。
产物、manifest、原始 cpuprofile、分组摘要及服务日志保存在 refactor/.cache/core22-profile-*。
脚本在 finally 中关闭浏览器和自身服务,没有使用连接的 Chrome,也没有新依赖或修改正式性能夹具。
只有调用栈位于 constructProfilePlayer / destroyProfilePlayer 内的样本才计入对应分组;
其余样本独立统计。请求采样间隔 100 微秒不表示平台实际达到该分辨率,采样空隙和原生调用
可能计入 JS 调用方。摘要中的耗时是带分析器的诊断数据,不得拿来替代未插桩的新旧配对门槛。
两次修改前采样均把 control/layout.ts 的初始 update 定位为构造热点。它在控件 DOM 创建后
同步读取 offsetHeight,之后还会收到 ResizeObserver 的初始通知。现在原生 observer 路径
使用首次布局通知完成测量,避免在后续构造 DOM 写入前额外强制布局;显式 resize 仍同步,
缺少 ResizeObserver 时仍立即测量。新增浏览器用例先复现一次同步读取,修改后三引擎为零,
并检查首轮渲染的窄屏高度、字幕偏移、fallback 和首次通知前销毁。修改后采样不再在构造栈
出现该 update 热点,这一事实不等于整个播放器已经达到性能发布门槛。
销毁采样主要落在原生 video.load() 和模板 DOM 移除,资源作用域清理占比较低。
保留 reset 的 removeAttribute('src') / load 顺序:不能为了缩短同步计时留下媒体资源,
也不能把清理挪到计时窗口外制造收益。原始计时波动仍须通过正式配对与后续 MOD-03/REVIEW-01 复核。