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

4.5 KiB
Raw Permalink Blame History

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,原阈值不变。

本次浏览器验收包含普通键盘/进度/音量及回调清理,具体最终执行范围、报告和文件 指纹见机器记录。未运行此次候选的完整 真实安装/初始化配对、物理设备或远端CI;旧安装证据不自动覆盖此次候选。

接下来继续MOD-03的持久化/初始化/布局测量,再使用新的实际安装包完成正式三组 BASE-06性能/资源对比。不能通过提高阈值、节流公开事件、延迟销毁或删除兼容逻辑 制造收益。回退本检查点并正常重建核心/i18n可恢复旧的冗余写入行为;不涉及依赖、 版本或公开声明变更,没有推送或发布。