Files
ArtPlayer/refactor/changes/2026-09-11-CORE-22-core-acceptance.md

9.0 KiB
Raw Permalink Blame History

CORE-22 核心阶段完整验收

首轮起点为 ENG-08 提交 4a9a26d4;ENG-11 提交 5efc7f76 后恢复核心验收。下文保留实施过程,最终阶段结论见文末。核心阶段不等于全项目或 npm 发布验收。

首先处理 ENG-PERF-01/02:确认核心体积增长的源码/构建来源,保留旧版与候选真实字节和相同格式;对间歇构造耗时继续同环境配对取证。不得通过提高阈值、删除兼容功能或忽略采样差异让报告通过。

随后复查核心公开差异、运行时与声明消费者、资源和完整安装包浏览器矩阵。旧核心/新插件及新核心/旧插件的生态范围、外部 SDK 和物理设备缺口,必须明确链接对应集成/REL 任务,不能把 chapter 试点结果当作全部插件通过。

若归因发现需要独立实施的模块修正,按 execution-gates.md 拆分任务和下游依赖,逐项验收后独立提交。当前尚无优化收益或兼容总验收结论。

首轮体积归因

可复用的正式构建分析从本任务拆为 ENG-11,下游依赖已更新;在该前置交付前本任务暂回 todo,保留初步工作,不重复宣称工具实现。当前三格式产物没有变化。详见 归因说明 和 完整数据。

同工具链下,起点源码构建现代包 gzip 为 35703 字节,当前为 58374 字节;主要增量仍来自实现而非换编译工具。已提交产物对照中,键盘/焦点、设置树和显示模式三阶段合计约占净 gzip 增量六成。接下来审查这些模块的可避免开销与构造耗时,不删除已有回归保护的兼容、清理和错误恢复路径。

设置导航:减少重复 DOM 工作

ENG-11 提交 5efc7f76 后恢复 doing。本阶段修改两个生产 TS 模块,不改变公共入口、回调、点击语义或声明。keyboard.ts 在读取条目和布局前排除无关按键;keyboard-focus.ts 为仍在活动面板内且可聚焦的 preferred 元素直接复核可用性,免去第二次全表扫描。若元素失效或只是包装节点,仍走原来的后代/选中项回退路径。每次按键仍重新读取条目,不跨事件缓存。断开、禁用、inert、无布局盒的元素先被排除,再读取计算样式。

40 个原生按钮的真实 Chromium 修改前证据显示:正常向下导航调用两次 querySelectorAll、80 次 getComputedStyle;修改后三引擎均为一次扫描、41 次样式读取。无关字符键从一次扫描/39 次样式读取变为零。浏览器测试还验证即时隐藏、inert、原生 disabled、tabindex=-1、恢复和公开 remove 后的实际焦点。记录的是操作次数,不据此估算毫秒收益。原有嵌套面板、更新失败恢复、原生范围、暂停作用域等回归保留。

构建后的现代包为 208030 raw / 58429 gzip9 字节;与 ENG-08 的 207875 / 58374 相比增加 155 / 55 字节。legacy 为 212211 / 59683,ESM 为 361484 / 77137。该小幅代码成本换取避免重复扫描,不能算作体积优化;ENG-PERF-01 仍 open。架构说明同步到包内 ARCHITECTURE.md。产物全部由正式 build 和 build:i18n 生成,没有手改产物或公开声明。

新安装包 run-UElxNR 的三引擎配对均完整,54 次候选资源清理探针通过。Chromium 第一组 core/chapter 销毁分别增加 3.1/2.5 ms,第三组 chapter 构造增加 2.8 ms;WebKit 第一组 chapter 销毁从 71 到 98 ms,其他组未重复该销毁信号;Firefox 本轮没有计时信号。固定计时夹具使用默认关闭的设置面板,不能把这些波动归因于本次导航路径。原始样本保留,ENG-PERF-02 扩展为构造及销毁计时待复核,门槛不变。

阶段证据见 设置导航与配对报告。本阶段不是 CORE-22 完整验收;完整安装包浏览器矩阵、核心差异结论以及性能归因仍未完成。不复用上一任务的全量结果宣称当前源码已全部通过。本任务完成时再统一独立提交;当前没有新的完成任务,也没有 push/tag/publish/merge。

验证:完整本地 CI 476 项(440 单元、11 工程、25 基线),249 个生产 TS 严格检查通过;源码构建三引擎设置/网页全屏/快捷键组合 327 项通过。新安装包 34 个运行时、5 组旧类型、8 组精确类型通过;107 个工作区 dist/types 文件以及三份 docs/compiled 核心产物与安装包相同。三个导入检查通过,安装包 modern 与 legacy 的设置键盘专项各 36 项通过,均无失败、重试或跳过。未为本次小改动重复宣称覆盖率测量或远端 CI 成果。

构造布局测量与最终核心阶段验收

两次真实 Chromium CPU 采样将默认构造热点定位到 control/layout.ts 的同步 offsetHeight 读取。 支持 ResizeObserver 时现在使用其首次布局通知,在构造剩余 DOM 写入后测量;旧环境立即测量, 显式 resize 仍同步。修改前的原生 observer 探针稳定记录一次同步读取,修改后为零,三引擎 15 项初始布局、fallback、窄屏/字幕位置和首次通知前销毁检查通过。最初的 fallback 测试在字幕 CSS 过渡未结束时断言最终位置,已改为等待实际状态,保留原失败报告,没有改变位置门槛。

两次修改后 CPU 采样不再在构造栈出现该 update 热点。诊断脚本已保存到 refactor/scripts/profile-core-layout.mjs,明确限定为 Chromium 未压缩源码构建的带分析器定位, 不是新旧性能门槛。Chromium 销毁采样主要落在原生 load 和 DOM 移除;保留释放顺序,不能将其 延后到计时区间外。WebKit 的销毁信号不能仅用 Chromium 调用栈解释。

最终安装包 run-vynq7l 的结果如下,详见 最终冻结证据:

验收项 结果与范围
源码与声明 自有核心源码 TS 迁移完成,249 个生产 TS(含 chapter)严格检查,37 个生成核心声明无漂移;唯一保留的 src JS 是有来源记录的 screenfull
本地 CI 476 项:440 单元、11 工程、25 基线;新增诊断脚本另行 lint 和实际执行通过
安装包消费 34 运行时、5 组旧类型、8 组精确类型通过;107 个工作区分发/声明文件及三份 docs 核心产物与安装包匹配,三个导入检查通过
完整浏览器矩阵 modern 1761、legacy 1761;每种格式每引擎 587 项,零失败/重试/跳过;真实媒体、核心 Monaco、已有 chapter 四组合和自定义插件均包含在当前套件
最新覆盖率 224 运行时文件、26 明确排除,四个关键生命周期/操作文件的行/分支/函数均 100%;全体 Node 行 60.90%、分支 86.55%、函数 66.62%,不与浏览器数量合并为覆盖率
性能/资源 每引擎三组正式配对均完成,54 次候选资源探针通过;本轮三引擎均无构造计时信号,Chromium/Firefox 无任何计时信号,WebKit 两组销毁仍超阈值
分发体积 现代 208037 raw / 58434 gzip9 / 53372 Brotli6;legacy 212218 / 59686 / 54412;ESM 361496 / 77141 / 70030。相较 ENG-08,现代增加 60 gzip 字节,不能称作体积缩减

SDK-12 的实际同步集成范围已补齐:固定 option-validator 2.0.6 与文件哈希,真实新旧安装包 验证正常/非法配置、首错、挂载前失败、容器复用、媒体 ready/customType 和销毁;纯同步依赖本身 不创建网络、切源任务或设备资源。它的直接测试范围与核心完整矩阵对应,不套用外部媒体 SDK 的 设备/网络门槛,也不声称已经审核整个第三方项目。

CORE-22 完成核心结构、兼容差异处置和当前固定消费者的自动化阶段。具体 API-01 至 API-12 入口及旧声明/切源/生命周期差异的结论见 核心验收范围。现有方法、类型 兼容入口、事件/Promise、DOM/CSS hooks 和包分发回归通过;新派生控件高度值的首次测量时机有 明确说明和浏览器验证。没有把 chapter 或受控能力场景当作所有插件/物理设备通过。

ENG-PERF-01/02 保持 open,由 MOD-03 和 REVIEW-01 继续复核:本轮 WebKit 第一组 chapter 销毁增加 44 ms,第二组 core 增加 30 ms,第三组未触发;保存全部样本,不将其归为已证明的主机 噪声。体积增长虽已归因,仍需后续性能与发布复盘处理。此阶段交付不放宽阈值、不豁免发布,也 不删除后续性能依赖。全插件/外部 SDK、EX/SITE、物理设备、完整 CI/CD、各包 major 和三轮复盘 仍由原任务负责;完整目标继续推进。

本任务以独立本地 commit 交付,包含三处生产模块改进、回归、正式生成产物、诊断脚本、风险和 文档/状态。回退时整体 revert 本任务 commit,保留其父提交 5efc7f76 的运行时/产物对应关系, 不要只回退 TS 或只回退 dist。提交 SHA 在提交后由 Git 核对;没有 push/tag/publish/merge。