Files
ArtPlayer/refactor/changes/2026-09-14-SITE-VCONSOLE-01-lifecycle.md
T

57 lines
3.8 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.
# SITE-VCONSOLE-01: vConsole 销毁后的异步工作
## 问题与修复
SITE-07 的真实 mobile 页面发现 vConsole 3.15.0 销毁后更新已删除日志 store。
冻结 npm bundle 后,原生三引擎进一步确认三条独立路径:
- 最后一个日志插件移除时没有取消 RAF,也没有清空单例日志模型的旧队列。
`lifecycle.ts` 管理调度票据;先失效再取消,清空队列/标志,最后恢复 console。
被人为迟到交付的已取消回调也不能消费重建后的队列。
- core 的延迟面板插入以全局同名 DOM 查找目标,销毁后会报错,同名插件替换后会
把旧面板插入新插件。延迟回调现在核对原实例 isInited 和 plugin 对象身份。
- recycleScroller 的高度和条目尺寸异步续段在 timer 后访问已销毁的 Svelte 绑定
元素。两个续段现在在绑定元素为空时返回,保留正常布局路径。
## 结构、类型与兼容
`scripts/site-vendor/vconsole/upstream.js` 保留 npm 3.15.0 完整原字节,构建器校验
整个 SHA-256 及六个唯一替换位置。自有生命周期逻辑使用严格 TS,既有 TypeScript
5.9.3 和 esbuild 0.27.7 生成 ES5 私有辅助模块,不新增依赖或锁文件。
其余 bundle 字节、UMD 分支、CSS 和原 URL 保留;命名 AMD、CommonJS 和 browser
global 都有真实页面回归。没有改 ArtPlayer 核心/插件公开 API 或声明。
模块维护与重跑命令见 `scripts/site-vendor/vconsole/README.md`。
新增 `build:vconsole`、只读 `check:vconsole`、`test:vconsole`;接入根 Node 测试、
严格 docs-tools TS,以及 ci:check/ci:build 的 notices 前置顺序。生产 minified 文件
由生成器写出;manifest 与第三方台账分别保存上游和候选指纹。
## 验证记录
最终结果与输入指纹见 [机器证据](../baselines/vconsole-lifecycle-validation.json)。
原失败报告保留在 refactor/.cache,不能以最终通过覆盖:
- 最初原版 6 失败,首个仅日志补丁仍有面板异常;第二轮 9 项通过。
- 扩展原版回归 13 失败/2 通过中,AMD harness 错把命名 define 当匿名 define;
这是测试错误,已按冻结 UMD 原文改正,不计为产品缺陷。
- 扩展候选 17 通过/1 失败暴露间歇 scroller style 异常;没有扩大等待或吞掉错误。
- 原版 scroller 专项通过控制零延迟 timer 在三引擎稳定得到空节点 style 异常。
该轮 `.vc-log` 选择器错误也留档;仅改成 `.vc-log-row` 时,因为挂起了初始化,
仍没有日志行。正式测试先确认日志可见,再挂起 timer、改变 viewport 高度,
销毁前均有 21 条真实日志行;原版出现空节点异常,候选无异常。
- 最终同一测试:原版 12 失败/6 通过;候选含 mobile 播放 21 全通过。40 项单元/
CI 测试、严格 docs-tools TS、工具链、冻结安装、生成校验和定向 lint 通过。
根 lint 无错误,保留既有 docs/assets/ts/artplayer.d.ts 的 1 条 unused-disable warning。
日志及面板用例使用原生 RAF/DOM;迟到已取消 RAF 和挂起的零延迟 timer 是显式
故障注入,未把它们称作未经控制的用户操作。mobile 用例仍有实际视频播放和可见
日志。浏览器是本机 Playwright 三引擎,不是物理 iOS/Android 或远端 CI 结果。
## 剩余边界与回退
本任务只关闭已复现的日志/面板/布局迟到工作,不宣称覆盖 vConsole 所有生命周期。
原 LICENSE 原文继续分发;缺失的 MIT 正文和依赖 notices 仍属于 VENDOR-07,
SITE-07 仍 doing。Monaco/Codicons、console bundle、字体/媒体许可也未关闭。
没有 npm 发布、部署或 push。回退本任务提交同时恢复生成器、候选、指纹和 CI
命令;不要只替换 docs 中的压缩文件而留下失配的生成检查。