Files
ArtPlayer/refactor/changes/2026-09-14-MOD-03-performance-acceptance.md
T

77 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MOD-03 核心热路径测量与选择性优化
本任务完成计划中的核心测量与优化工作。生产改动在检查点
`23a4f22b7256392ddb4cc6b2eef5bed6e93879d2`,本次补齐持久化、当前构造采样、布局
读写和实际安装包的正式配对验收。没有把性能工作定义成所有计时必须单向变快,
也没有把体积审查信号或未来候选复盘自动关闭。
## 按原任务范围核对
| 范围 | 实际工作与证据 |
| --- | --- |
| 进度更新 | 共享slider只写变化的ARIA值,保留实时读取及外部DOM恢复;main/legacy各三引擎三组旧新配对,100次重复刷新从500次写入降为0;见slider-updates-validation.json |
| DOM读写 | 当前安装包验证原生ResizeObserver构造同步控件高度读取0次、fallback1次;40项设置首次导航1次查询/41次样式读取,无关按键0/0,动态隐藏/禁用/恢复的焦点继续正确;12项原生检查通过 |
| 持久化 | 原生Storage/JSON操作与独立计时、旧新三组/三引擎共9项检查;验证正常读取返回独立对象、写回保留中途加入的其他设置、暂停后不保存;保留既有实现 |
| 初始化与销毁 | 当前源码10次热身/60次实际首帧、构造与销毁的Chromium采样;再用实际安装包完成三引擎各三组BASE-06正式旧新配对,54次候选资源探针通过 |
| 兼容和类型 | 新隔离包36项运行时入口检查、5组旧类型模式、8组精确类型模式均通过;原2859项单元及main/legacy交互回归见前检查点,播放器源码此后未改 |
| 体积与无效/拒绝方案 | 保存原始计时、变慢组、初版测试错误、原349ms失败;不靠缓存可变存储对象、删第二次读取、延迟清理或改阈值获得更好数字 |
## 持久化的实际成本与取舍
每个旧新变体先实际播放,预热100次合成timeupdate,然后记录五组各100次刷新,
计时期间不替换Storage/JSON方法。另一个100事件窗口才包装原生方法计数:两边均
为200次getItem、200次JSON.parse、100次JSON.stringify和100次setItem。
每100事件的三组中位数:Chromium旧约1.4–1.6ms、新1.5–1.8ms;Firefox旧2ms、
新1–2ms;WebKit旧1–2ms、新3ms。保留原始样本及计时精度限制;这是整个合成
timeupdate链路,不是单独Storage耗时,不从中推算真实视频每秒的开销或宣称改进。
直接复用解析对象会改变正常get的对象隔离;直接重用第一次envelope可能覆盖自定义
get在两次读取之间写入的其他设置。原生旧版/候选均验证了这两条行为,因此本轮
没有为减少读写而改变存储格式、写入频率、保留规则或同步API。被拒绝方案来自
代码审查与契约验证,不声称已经实现并测量过这些不兼容替代方案。
初版用保存值与稍后的currentTime精确相等作断言,导致WebKit三项失败,两次读取
相差约15–27微秒;其中有旧版也有候选。最终改成核对保存值位于同一次刷新前后
原生读取的区间内,不引入任意容差。首轮记录保留,不能将测试错误登记成产品缺陷。
## 初始化、布局与正式配对
复用profile-core-layout.mjs取得当前源码真实CPU采样。构造采样约90207微秒,
其中insertAdjacentHTML约15793、模板init约14994;销毁采样约51139微秒,原生
video.load约32147、模板destroy约9743。采样总量不是所有构造的精确壁钟耗时,
原生时间也可能计到JS调用方;这是定位证据,不替代独立正式配对。当前数据没有
支持在这一轮增加模板缓存或把原生媒体释放延后;保留DOM/SSR/代理和同步清理行为。
布局/设置测试使用当前实际安装包,复核CORE-22已有优化仍生效。原生observer不在
构造中强制读取控件高度,fallback仍立即测量;尺寸、字幕位置与首次观察前销毁均
有断言。长设置列表的工作量保留原始附件,并核对所有引擎一致,未跨事件缓存可用项。
正式配对沿用BASE-06媒体、热身、五次样本、core/chapter两种配置和三组交替顺序。
新包run-rawoRh首轮Firefox因实测观察349ms失败,已由独立ENG-13修复当前适配层,
冻结数据和350ms门槛未改。同一安装包重测完成三引擎、108个旧新资源窗口,其中
54个候选窗口通过严格清理;详见observation-window-validation.json。
第二轮没有计时超阈值信号,但首轮Chromium销毁信号保留;只改观察窗口不构成
计时优化,不以重跑成功证明波动消失。体积始终review-required:现代208943 raw /
58756 gzip9 / 53660 Brotli6;比即时修改前增加12/10/12字节。原完整增量归因仍在
build-analysis.md,不把新增可访问性、设置树和失败恢复能力的成本说成TS工具运行时。
## 验收边界和后续维护
补充18项storage/auto-playback单元和新增浏览器测试的定向lint通过。包内架构文档
更新后重新执行yarn test:package:run-jl3UQr的36项运行时、5组旧类型、8组精确类型
均通过。与实际浏览器/计时使用的run-rawoRh逐文件比较,只有核心ARCHITECTURE.md
发生变化,所有其他打包文件一致;这里复用相同运行时字节的证据,不声称浏览器
曾运行新归档。完整包报告与差异哈希保存在收尾记录。
MOD-03的选择性优化、全部指定测量、旧新对比和权衡已形成可复跑证据。
ENG-PERF-01/02继续由REVIEW-01及最终候选复盘审查:体积增长是真实成本,间歇计时
信号不能简单宣布为噪声。未来源码/构建/依赖改变后,重新打包和执行相应验证。
这不是全项目、全插件、GPU/原生内存、物理设备或远端CI验收,也不是npm发布授权。
详细报告、样本、输入指纹和复跑命令见
[收尾记录](../baselines/core-performance-validation.json)。这次只新增测量/契约测试
及维护文档;生产优化保留在同任务前述检查点。回退该检查点并正常构建核心/i18n
可恢复冗余ARIA写入;回退当前提交只移除收尾测试/文档及任务完成记录。