Files
photo-live/docs/04-优化方案.md
T
浅念 d973c714f0 chore: init repository skeleton
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:13:49 +08:00

12 KiB

图片直播项目优化方案

版本:V1.3
日期:2026-09-17
关联文档:需求说明书 · 项目计划 · 技术实施方案

本次优化补齐现场操作、异常恢复、文件保护、统计口径和运营维护,并降低第一版部署复杂度。以下优化纳入第一版文档基线;语言范围、时间窗口、容量、设备兼容和工期仍需验证,不视为已经实现或测试通过。

1 优化范围与优先级

P0 表示必须在核心开发前明确或验证,P1 表示第一版交付前完成。优先级用于实施排序,不代表 P1 自动延期。

编号 优化内容 优先级 需求映射 任务映射 验收映射
O01 连续拍摄并自动入队,清楚显示目标相册 P1 R17 T20 A15
O02 上传开关与公开开关独立,支持批量隐藏 P0 R18 T20 A16
O03 管理员转移相册负责人,保留历史归属 P1 R19 T20 A17
O04 下载权限拆分与水印版本规则 P0 R20 T20 T22 A18
O05 照片准备阶段与本地服务端记录分离 P0 R21 T21 A19
O06 原图防覆盖及受控图片访问 P0 R22 T22 A20
O07 明确匿名浏览统计和跨标签页去重 P0 R16 R23 T19 A14
O08 气泡去重、后台暂停和减少动画 P1 R24 T24 A21
O09 JS 绑定展示位,后台切换相册 P1 R25 T23 A22
O10 容量流量告警与组件节省流量 P1 R26 T17 T23 A23
O11 API 与实时入口合并部署,任务进程独立 P0 实施约束 T02 A24
O12 修正任务依赖并按岗位检查工期 P0 管理约束 项目计划 里程碑评审

2 现场拍摄与照片准备

2.1 连续拍摄

工作人员先选择相册和分类,再进入连续拍摄模式。每次拍摄成功后自动创建准备任务,不要求逐张跳回列表确认。拍摄页常驻显示相册名称、分类、待上传数量和失败提示。

切换相册只影响后续照片,已入队任务的目标不可隐式修改。每张照片都有独立任务 ID;拍摄成功但写入本地失败时必须明确提示,不能显示“已加入队列”。

2.2 准备阶段

新增“准备中”和“准备失败”,涵盖系统相册文件获取、云端照片下载、本地空间、格式检查和复制。准备完成后才进入可后台传输的队列。

准备任务和上传任务分别统计,例如“准备 5 张,等待上传 20 张”。准备阶段不承诺可以无限后台执行;切后台前未准备完成的照片应保留可恢复状态,必要时提示回到 App。

本地任务包含实际文件和系统传输信息;服务端记录包含上传确认、发布结果和历史信息。换手机后可查看服务端历史,不能恢复另一台手机尚未上传的文件。新手机重新选择同一文件需明确创建新任务或进行重复提示。

3 相册控制与人员交接

相册采用独立的 uploadEnabled 和 publicEnabled 开关。关闭上传阻止新建任务和续签,已经完成核验的处理任务可继续处理;关闭公开立即停止公开 API 与实时订阅,新图片可处理就绪但不对外展示。

重新公开时,只展示符合照片可见性要求的图片,不自动恢复已隐藏或软删除的照片。活动结束时间本身不改变两个开关。

批量隐藏操作应返回逐项结果并记录操作者。观众列表、全屏图、轮播和待发送气泡均校验照片可见性;已有下载文件无法收回,缓存访问边界见第 5 节。

公司管理员可把负责人转移给有效工作人员,原上传人信息保持不变。原负责人是否保留协作者身份必须在转移操作中明确选择。停用账号不删除其历史照片,相册由管理员接管后再安排转移。

4 下载与水印

采用两个字段:downloadEnabled 和 originalDownloadEnabled。原图下载必须以允许下载为前提;关闭全部下载时隐藏下载操作并拒绝下载接口,但不能阻止截图或保存已展示的浏览图片。

允许下载且关闭原图时,提供当前配置允许的浏览版或水印版。原图始终保存,不把加水印图片覆盖到原图对象上。

水印配置带版本号。修改默认仅影响后续新照片;历史照片重生成由创建者或管理员明确发起,显示数量和进度,失败可重试。新衍生版本全部就绪前保留可用旧版本,更新单张照片引用必须原子化。旧版本清理通过独立策略执行,不在生成失败后直接删除。

5 文件不可变与访问链路

上传会话中的临时对象与已发布原图应有清楚边界。推荐先上传 staging 路径,服务端固定源版本或完成条件校验后复制到客户端无写权限的 originals 路径。后续图片处理只读取固定的原图对象。

仅随机文件名不够:同一会话的旧授权仍可能重写同一路径。上传路径应禁止覆盖,并对“对象已存在”执行完整性核验;分片完成与普通上传分别验证。不能只靠客户端自觉添加禁止覆盖参数,服务端签名或权限机制应能约束相应行为。

私有 OSS 和 CDN 回源授权、观众侧 CDN 访问鉴权是不同环节。接入 CDN 时必须确定签名、缓存键、有效期、刷新与隐藏后的失效方式。未采用 CDN 时也要处理短期 OSS 链接过期,长时间打开的大图可重新请求授权。

下线或隐藏后停止新签发链接、撤销频道并通知在线页面。对已签发 URL 和缓存定义可接受失效窗口,参数实测后确认;不能承诺未下载图片在所有缓存中瞬时消失。

参考:OSS 禁止覆盖示例、CDN 与 OSS 访问说明。

6 浏览统计与互动

6.1 浏览次数

匿名观众使用同源持久浏览器标识,同一浏览器下多个标签页共享;标识创建发生并发时由服务端去重逻辑保护。同一浏览器、同一相册在建议的 30 分钟窗口内只计一次,窗口仍是待确认参数。

仅页面实际可见且相册信息加载成功后上报。翻图、语言切换、轮询、自动轮播、后台预览和资源请求不计数。超过窗口后的新页面访问可再计一次,原页面持续停留不定时增加次数。

这不是可靠的真实人数统计;不同浏览器、隐私模式或清除记录可能重新计数。浏览器禁止持久存储时降级为当前页面标识,明确降低去重精度,不影响浏览。

6.2 点赞与气泡

点击者先播放本地动画。服务端确认与广播通过源批次标识关联,当前页面忽略自己已经播放的批次;其他页面照常展示。若合并事件同时含自己和他人的点击,只抑制自己的部分。

后台标签页不积压动画,恢复后只同步最新计数。照片隐藏后,待发送和待展示的气泡都要过滤。支持关闭气泡或减少动画,不改变点赞数,也不影响其他观众。

7 网站展示位

官网接入时绑定 slotId,后台配置展示位指向哪个相册。更换活动时修改绑定即可,无需改动网站代码。组件只暴露公开配置,不携带管理权限。

展示位包括名称、启用状态、相册、默认语言、尺寸、位置和轮播参数。管理员管理全局展示位,创建者只能绑定有管理权限的相册到被授权的展示位,不能覆盖他人官网配置。

第一版用短周期轮询获取展示位配置和近期照片,周期参数经测试确定,不依赖点赞 WebSocket。切换相册时清空旧图与请求状态,避免旧响应覆盖新配置;后台返回配置版本供客户端校验。

组件页面不可见时暂停轮询与预取,恢复可见后重新校准。无图、相册下线或展示位停用时显示约定空态或收起;具体外观在原型确定。

8 部署与费用

V1.2 调整为国内管理服务与海外观众服务分别部署,海外 API 和 WebSocket 在同一服务进程内按模块组织,国内图片处理 worker 独立。保留未来独立实时进程的接口,不提前部署多个小服务。生产实例数量按可用性与压测结果配置。

费用模型至少区分原图、浏览版本、旧水印版本、请求、处理、下载流量、CDN、备份和日志。按十进制举例,1 万张 8 MB 原图约 80 GB;1 万观众每人浏览 100 张 300 KB 图片,约 300 GB 图片传输。这只是用量算例,不是价格估算,也未扣除浏览器缓存或计入原图下载。

设定项目及相册用量统计、费用或容量阈值与告警接收人。告警不自动删除照片,也不默认中断活动;是否需要限制原图下载或新增上传由管理员明确操作。

9 排期影响

V1.1 历史估算:原计划为 102 至 146 角色人日。增加 T20 至 T24 五个增量工作包,约 27 至 42 人日,修订为 129 至 188 人日。浏览统计精化并入 T19,部署简化并入 T02,费用告警并入 T17,不重复计入新增任务。

V1.1 当时采用 12 周基线;V1.2 增加国内海外同步和全球 CDN 验收后,当时为 151 至 222 人日、14 至 16 周估算,以 16 周安排为基线。岗位分配和任务依赖见项目计划,W2 技术验证后再次确认。

10 优化专项验收

  • 连续拍摄时切相册不会改变已经入队照片的归属。
  • 云端照片未准备完、存储不足及源文件失效都有明确状态。
  • 锁屏批量上传遇到临时授权过期可恢复,无重复发布。
  • 停止公开后 API、频道、轮播和气泡行为一致。
  • 管理员转移负责人后旧照片上传人和审计信息保留。
  • 两个下载开关组合合法,历史水印重生成失败不破坏现有浏览图。
  • 旧凭证不能改变已发布原图,重试已有对象不会覆盖或误报成功。
  • 同浏览器多标签访问去重,自动轮播不增加浏览次数。
  • 本地气泡不会因自己的广播重复出现,减少动画不改变计数。
  • 展示位换相册不用修改官网,旧请求不能恢复旧相册内容。
  • 组件不可见时停止无效更新,流量与容量告警可验证。

11 仍待验证的参数

30 分钟浏览窗口、后台最长测试时长、图片格式与大小上限、上传并发、图片尺寸与质量、缓存失效窗口、轮询周期、用量阈值、目标 OS 版本及岗位实际投入。待定参数不阻止完成原型与技术试验,但必须在对应模块验收前冻结。

12 V1.2 海外访问增补

国内负责管理与上传,海外负责公开页面、查询、浏览点赞和气泡,现有国内 OSS 配合全球 CDN。图片文件不经跨境业务同步复制;国内向海外发送版本化展示元数据,海外向国内回传版本化统计快照。

新增 T25 至 T29,覆盖海外可行性、持久内容同步、统计回传、CDN 链路及故障验收。隐藏删除优先传递,定时对账补漏;权威数据按类型单点写入。V1.2 是海外架构变更记录;当前范围与估算见 V1.3 计划。

13 V1.3 账号与用户来源调整

第一期后台与 App 统一账号密码登录,飞书接入延期,不实现飞书授权或绑定。国内服务定期调用用户接口更新本地资料,支持任务记录、失败重试、手动补拉和稳定外部 ID 映射。

本地密码、权限和手动停用不受普通资料同步覆盖。新增用户激活、初始密码、同步周期和源停用字段需确认;空响应与部分分页失败不得误停用人员。T04 改为接口验证,新增 T30 同步管理,当前估算为 156 至 231 人日,16 周工作基线待接口验证后复核。