
Issue #5
最近牛来是顶流啊,大家有去看吗?
这周几乎没有离开新版 Moovie。
从 8 月 22 日到 24 日,连续整理了 v4.0.1、v4.0.2 和 v4.0.3 三个版本。表面上看,这些版本包含了性能优化、广告跳过、界面调整和不少修复,但真正贯穿其中的事情只有一件:
让用户看到的页面更快,让后台承担更多复杂度,让系统在出问题时也不要影响正常使用。
This Week's Story
上一周的流量让 Moovie 先学会了站稳,这一周则是在继续思考,怎样让它跑得更轻一点。
重构过程中很容易陷入代码本身。一个模块能不能拆开,一张表要不要保留,一条任务应该在哪里触发,这些问题看起来都属于实现细节,但最后都会影响用户打开页面时要等多久、播放器能不能及时启动,以及高峰期系统会不会突然变得很脆弱。
这几天做的很多事情,本质上都是把原本发生在请求过程中的工作移出去。
详情页不再一次性查询所有数据,而是先把标题、海报、简介和评分展示出来,播放按钮、社交统计、在线资源、相似推荐等内容在页面渲染后异步加载。推荐和热门内容不再由用户请求实时计算,而是由 Worker 提前生成快照。向量也不再等用户打开详情页时临时排队,而是交给后台调度器,在元数据完整之后统一补全。
页面请求不需要知道后台做了多少事情,这可能就是这次重构最重要的方向。
What Changed
让首屏先到。
影片详情页初始渲染只保留最关键的元数据,首屏查询从 9 次串行查询降到 1 次,其余内容通过 HTMX 异步加载。播放页也减少了不必要的等待,播放器所需的播放地址保持同步获取,用户状态和播出日程改为页面加载后填充。
首次访问还没有收录的影片时,页面会自动轮询数据状态,准备完成后无感跳转到详情页,不再要求用户反复刷新。搜索结果为空时也不再写入缓存,避免暂时没有数据的结果长时间挡住后续真正出现的资源。
让后台接住复杂度。
推荐、热门好片和本站热播都改为读取后台生成的快照。快照过期时,页面可以继续使用旧数据,同时由 Worker 异步刷新,不必让用户在请求过程中等待一轮完整计算。
Worker 任务增加了优先级,推荐和热门快照优先保障用户能感知到的内容,短评、剧照和向量等任务则在后台慢慢处理。资料完整的影片不再重复采集,不同任务也增加了冷却时间、并发限制和超时保护,减少任务堆积后对正常访问的影响。
向量生成链路也重新整理了。现在由调度器自动寻找资料完整但还没有向量的影片,并且严格等待 TMDB 合并完成后再生成,避免用半成品元数据生成低质量向量。详情页即时排队向量任务的逻辑也被移除了,热路径因此少了一次数据库检查和并发争用。
让广告跳过变成一次协作。
v4.0.3 增加了基于 M3U8 结构分析的广告检测和众包跳过系统。前端会根据 DISCONTINUITY 标记、加密方式变化、路径差异和分片时长等特征,识别疑似广告片段,并为候选生成 SHA-256 指纹。
当一个广告指纹获得至少 5 票确认,且确认率达到 80% 以上时,播放器会在 HLS 加载时直接注入 EXT-X-GAP 跳过。还没有形成共识的片段,则通过浮层询问用户“是广告,跳过”或“不是”,投票结果在全局共享。
这个功能只对主动开启设置的登录用户生效,所有异常都会开放处理,不会因为广告识别失败而影响正常播放。
让失败也有合适的形态。
高并发触发 503 时,不再返回一段冷冰冰的纯文本,而是展示带品牌样式、加载动画和刷新重试按钮的过载保护页面。HTMX 局部请求则返回更轻量的嵌入式提示卡片。
同时修复了播放简介中的 HTML 泄漏问题,将 hls.js 从 @latest 锁定到 @1.5.18,统一了亮色和暗色模式的品牌配色,也处理了窄屏下播放操作栏按钮溢出的问题。
What I Learned
性能优化不只是把某条 SQL 再加快一点。
更重要的是判断哪些事情必须在当前请求里完成,哪些事情可以延后,哪些结果可以暂时使用旧版本,以及哪些任务应该在系统繁忙时主动让路。
异步加载、快照读取、后台调度和过载保护看起来是不同的技术方案,但它们都在做同一件事:不要让一次普通的用户请求承担整个系统的复杂度。
广告跳过功能也让我看到,涉及判断的功能不能只追求“自动化”。它还需要处理不确定性、误判和用户信任。明确的共识阈值、用户投票、主动开关和失败开放,都是功能能够长期运行的组成部分。
A Small Detail
这周把 hls.js 从 @latest 锁定到了 @1.5.18。
这不是一个会出现在宣传页面里的功能,甚至很容易被忽略,但它可能比一次漂亮的界面改动更直接地影响播放体验。依赖自动升级看起来省事,实际上却把兼容性问题交给了未来的某一天。
有时候,稳定性就是从不让版本自己随便变化开始的。
This Week's Pick
本周推荐新版 Moovie 的智能跳过广告功能。
不是因为它是这周最复杂的功能,而是因为它把一个人很难持续维护的问题,变成了用户共同参与的系统。有人发现疑似广告,有人确认,也有人纠正错误判断,最后形成一份可以被所有人复用的结果。
这比单纯写一个更聪明的检测规则更有意思。规则负责提出猜测,用户一起决定它是否值得被相信。
Next Week
继续观察 v4.0.x 在真实访问中的表现,重点关注高并发下的资源使用、过载保护和后台任务堆积。
广告指纹系统还需要继续观察误判情况,向量补全和采集任务也会继续交给后台慢慢消化。重构还没有结束,但方向已经比之前清楚了:
让用户的请求尽可能简单,让系统内部的复杂度各自待在该待的位置。
Build a little. Learn a little. See you next week.
评论 0 条
暂无评论,来种下第一颗种子。