Files
ArtPlayer/refactor/changes/2026-09-14-MOD-03-slider-updates.md
T

65 lines
4.5 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 进度与音量 ARIA 更新检查点
MOD-03保持doing。本轮处理已经进入播放热路径的重复DOM写入,尚未完成该任务要求的
初始化、持久化、全部DOM读写及正式安装包BASE-06配对验收。ENG-PERF-01/02不关闭。
## 实现与兼容边界
`accessibility/slider.ts`每次刷新仍读取完整range、校验有限数值并计算显示文本。
仅把五个动态ARIA属性改成与当前getAttribute值比较后再写入;辅助函数不导出,
不添加实例字段、不跨事件缓存、不延后更新。外部修改或删除属性仍在下一刷新修复。
范围/步长/禁用逻辑、键盘动作、焦点、公开媒体/进度事件、声明及DOM/CSS名称保持。
这是减少冗余DOM变更的内部优化。观察这些ARIA属性的MutationObserver将不再收到
值完全不变的重复记录,实际值变更仍会记录;不能声称MutationObserver记录序列
完全不变。这些键盘ARIA是本次重构增加的能力,不是静默删掉已发布的播放器事件。
没有修改公共setStyle、Storage方法、autoPlayback写入频率或原生媒体时钟。
不缓存上次range:它可能由外部代码改变,不缓存已写文本:外部代码可能修改DOM。
这样保留动态行为,代价是每次仍进行五次轻量属性读取;不产生布局尺寸读取。
## 验证设计
Node新用例在旧源码明确失败:重复update产生10次属性写入;其余10项旧键盘/范围/
清理用例通过。新实现11项通过,并覆盖只改变小数值、显示文本改变、外部DOM修复、
每次调用文本格式器及销毁后无更新。全项目2859项单元测试通过,严格核心TS和lint通过。
`test/browser/slider-updates.spec.js`默认验证当前候选,显式
ARTPLAYER_SLIDER_BASELINE增加修改前真实产物对照。每个引擎运行三组,按旧新/新旧/
旧新顺序;两边使用相同本地pattern.mp4和viewport,各自重新导航、创建并实际播放。
旧产物冻结自Git `7b0e1d156b8e21e422200ee345afa63950f9d5a2`,不是npm发布基线。
旧脚本通过单个路由替换,附件单独保存该文件和SHA;server manifest仍描述候选路由
原始文件,不能将其误当为替换后旧脚本的身份。
计时阶段暂停原生video,预热300个合成timeupdate,再记录五组各1000次的原始耗时。
没有在计时循环安装MutationObserver。随后单独用原生观察器统计100次重复事件,
验证公开订阅仍收到每次事件,并核对外部ARIA改写恢复。最后恢复真实播放,观察
真实timeupdate和ARIA数值,静态范围属性不应重复写入。这些计时只代表合成重复
事件的执行成本,不是帧率、输入延迟或真实页面端到端性能。
main/legacy各三引擎×三组通过;全部重复事件窗口均由500次ARIA写入降到0,
外部修复由5次降到2次,实际播放继续更新valuenow。主构建真实播放窗口中,旧版
4–5个媒体事件产生20–25次属性变更,候选相应窗口为4–5次;窗口事件数并非全部
相等,因此不以合计总数计算统一百分比。
主构建1000次合成事件的各组中位数:Chromium旧4.6–5.2ms、新3.2–3.6ms;
Firefox旧9–10ms、新7–8ms;WebKit旧9–10ms、新7–10ms,其中第二组候选10ms
比旧9ms慢。保留所有原始样本,不把操作数量下降等同所有环境计时都改善。
legacy的完整配对值同样保留在机器记录中,不按有利组筛选。
## 构建成本与继续工作
由正常`yarn build artplayer --analyze`和`yarn build:i18n`生成三种产物及docs副本,
没有手写产物。相较修改前,现代raw +12/gzip9 +10/Brotli6 +12字节;legacy
+12/+17/+11;ESM +154/+34/+44。此项是热路径更新优化,不是体积优化。
现代当前208943 raw / 58756 gzip9仍高于已发布5.4.0的134037 / 35486,原阈值不变。
本次浏览器验收包含普通键盘/进度/音量及回调清理,具体最终执行范围、报告和文件
指纹见[机器记录](../baselines/slider-updates-validation.json)。未运行此次候选的完整
真实安装/初始化配对、物理设备或远端CI;旧安装证据不自动覆盖此次候选。
接下来继续MOD-03的持久化/初始化/布局测量,再使用新的实际安装包完成正式三组
BASE-06性能/资源对比。不能通过提高阈值、节流公开事件、延迟销毁或删除兼容逻辑
制造收益。回退本检查点并正常重建核心/i18n可恢复旧的冗余写入行为;不涉及依赖、
版本或公开声明变更,没有推送或发布。