Files
ArtPlayer/refactor/changes/2026-09-13-PKG-DANMUKU-07-stability.md
T

4.7 KiB

PKG-DANMUKU-07 弹幕稳定性与共享层边界

已完成本任务限定的验收,任务及提交状态以tasks.json和Git为准。此项对12后的生产 实现增加原生负载和资源验收,没有改变运行时、声明、依赖、版本或构建内容。

验收范围

  • 候选核心中比较固定npm5.3.0插件与候选源码,三引擎,每秒2和20条,各三轮 14秒真实媒体播放。每轮追加12秒的时间戳序列,三轮总计72/720条;其余时间 让弹幕自然显示和到期。保留真实RAF、视频时钟、Worker与原始readys getter。
  • 候选逐项检查采样/显示无丢失,三轮总显示和回收均恰好一次;队列追加语义、 每条对象只属于一个对应状态池、空闲池唯一性、根层节点和空闲池一致均受断言保护。 包装原始节点getter只记录身份,确认实际重复使用旧节点,并且有空闲节点时 不绕过池分配新节点;Worker必须存在且唯一,正常请求全部回复,销毁恰好一次。
  • 旧插件结果保留为对照观察,没有把其可能的历史缺陷豁免用于候选断言。 每轮帧间隔单独统计;包含暂停/加载转换的总采样间隔另列,不能当纯播放卡顿。 可选performance.memory是未强制GC的读数,不能证明泄漏或作跨引擎内存排名。
  • 两核心、三引擎运行已有资源用例:共享挂载、初始化回滚、发送取消/锁、原始 错误、destroy(false)、替换加载移除被移动的节点、热图实例隔离。
  • 新增两核心的CSS mask边界用例:注册前就取得核心根层,以固定内联SVG mask 验证emit/reset/无参替换load/hide/show/destroy(false)中的层引用和样式保持, 销毁后两帧没有晚请求和新子节点。此用例设置资源测试的ready前置状态、采用 原生0.25播放速率,不能当时间戳负载证据;负载用例没有这些设置。

问题处置与兼容性

早期原生时间窗口诊断区分了两个来源:800ms主线程完全阻塞,及600ms用户异步 回调使旧调度停止采样。11独立修复隐藏Worker等待吞掉显示寿命;12独立修复异步 放置期间的采样和到期维护。07继续检查这些修复后的实际负载及资源状态。 没有把公开±0.1秒窗口改成无限追赶,因此完全阻塞时未被采样的时间点仍可错过。

本轮首个测试版本错误地把load(rows)当作替换,第二轮队列断言收到48/480而 错误预期24/240。核实原实现后修正累计队列预期,当轮显示数仍精确24/240;没有 修改生产语义。初步12项通过后,经独立审查补足Worker非空、节点身份复用、 逐条状态归属和跨轮恰好一次的断言,最终需按补强后的文件重新验证。

Mask仅依赖核心提供的video/弹幕根层及ready/destroy,不读取弹幕队列、Owner 或插件事件。旧契约文档误称根层由Danmuku建立,已依据核心模板纠正并注明日期。 固定发布归档和生产Mask源码未改。Mask自身晚推理复活RAF、模型dispose、并发 start、模型和完整组合问题仍由Mask迁移任务处理,不能从本CSS测试判定通过。

维护与重跑

yarn test:browser test/browser/danmuku-stability.spec.js test/browser/danmuku-mask-boundary.spec.js test/browser/danmuku-resources.spec.js --workers=2

负载测试的90秒单例deadline来自三轮42秒媒体预算及设置/销毁开销;没有扩大 已有短用例超时。每次运行必须等待进程终态,归档report/results,再运行另一格式。 正常来源是当前源码UMD;两个新用例均支持ARTPLAYER_DANMUKU_ARTIFACT。

包内ARCHITECTURE.md与refactor/danmuku-stability.md记录根层归属、诊断及限制。 07未修改生产,因此复用12已记录的264项源码/136项产物单测、严格类型/构建,及 其异步/几何/生命周期验证;不声称这些由本次持续负载套件重新完成。 08完整组合、09最终分发、真实Mask模型/设备以及全项目发布复盘继续保留。 回退本任务只撤销测试和文档,不应回退11/12已交付修复。

最终结果

补强后的66项浏览器检查全部通过(12项负载、6项CSS边界、48项资源),0重试、 0跳过。每个负载用例完成三轮42秒原生媒体推进,候选两档各72/720条均完整且 只显示/回收一次。精确节点复用、堆读数和帧间隔见 机器证据。 新测试lint通过;影响分析检查通过,保留Danmuku/Mask组合验证边,仅纠正其 “Danmuku创建根层”的错误原因,不降低CI范围。测试由现有Playwright目录自动发现。 未运行远端CI、未推送或发布。