mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-16 01:26:16 -08:00
perf(core): [MOD-03] avoid redundant slider attribute writes
This commit is contained in:
1 parent
7b0e1d156b
commit
23a4f22b72
18 files changed
+6012
-28
No files matched your search
@@ -0,0 +1,64 @@
|
||||
# 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可恢复旧的冗余写入行为;不涉及依赖、
|
||||
版本或公开声明变更,没有推送或发布。
|
||||
Reference in new issue
Block a user