Skip to content

perf(room,ws): 降低房间页重渲与广场广播开销 - #14

Merged
pjm314159 merged 1 commit into
devfrom
chore/perf-optimize
Sep 27, 2026
Merged

pjm314159 merged 1 commit into
devfrom
chore/perf-optimize

Conversation

@pjm314159

Copy link
Copy Markdown
Owner

变更说明

一轮性能自查后落地的优化(不改变对外行为):

前端

  • 房间页消息流:QrCard 加 memo(父级每秒 tick 不再整列重渲,倒计时仍由各卡片自身 tick)
  • 设置抽屉改为逐字段订阅 store,消息流/签到回执变化不再连带重渲抽屉
  • 自动签到只处理消息尾部增量(原先每次消息事件都重建全量 Set)
  • 扫码相机 BarcodeDetector 原生路径按 FRAME_INTERVAL_MS(300ms) 节流(原先 requestAnimationFrame 每帧都 detect)
  • 房间消息 store 入队时惰性裁剪过期项,数组有界(对齐后端 VecDeque 惰性淘汰)

后端

  • 连接进房后退订 lobby 广播、回广场时重新订阅,plaza_update 只发给广场页连接(原先广播代价 = 房间数 × 在线连接数)
  • broadcast_plaza 无 lobby 订阅者时提前返回,不再构建全量列表
  • share_qr 内容分配由 3 次降为 2 次(返回值不再携带广播拷贝)

未改动(附实测依据):登录扫码轮询保持"每约 30s 换一次二维码"。实测上游 /api/v3/user/login 为 30s 长轮询、token JWT exp = iat + 60s,即现状约 2 次建码/分钟;改为复用单个码至 55s 会把用户扫码后的剩余确认时间压到几秒,反而降低成功率。

变更类型

  • chore 构建/依赖/杂项(性能优化,不改行为)

目标分支

  • dev(feature/fix 常规合并)

自查清单

  • 分支名符合规范(chore/perf-optimize),基于最新 dev 创建
  • 提交信息符合 Conventional Commits
  • cargo fmt --check / cargo clippy -D warnings / cargo test(136 passed)通过
  • oxlint / tsc / 测试(63 passed)/ 构建 通过
  • 文档已同步(docs/CHANGELOG.md 已补记性能优化条目)
  • 无 unwrap()(测试代码除外)、无 unsafe、无 any
  • 涉及资源分配的改动已确认上限约束(消息数组与广场广播收件人均收敛为有界)

关联 issue / 备注

  • 行为回归检查:房间页不消费 plaza_update;Plaza 页挂载即 REST 拉取,离开房间回广场不会漏数据
  • 已跳过的低收益项:Hub::register 的同账号旧连接查找(仅建连时一次,加索引需三处同步维护,收益不抵复杂度)

前端:
- QrCard 加 memo,父级消息流每秒 tick 不再整列重渲(倒计时仍各自 tick)
- 设置抽屉改为逐字段订阅 store,消息流/签到回执变化不再连带重渲
- 自动签到只处理消息尾部增量,不再每次事件重建全量 Set
- 相机 BarcodeDetector 原生路径按 300ms 节流(原先 rAF 每帧都 detect)
- 房间消息 store 入队时惰性裁剪过期项,数组有界

后端:
- 连接进房后退订 lobby 广播、回广场重新订阅,plaza_update 只发广场页连接
- broadcast_plaza 无 lobby 订阅者时提前返回
- share_qr 内容分配由 3 次降为 2 次(返回值不再携带广播内容拷贝)

校验:cargo fmt/clippy/136 test;tsc/lint/63 test/build 全绿
@pjm314159
pjm314159 merged commit eb7574d into dev Sep 27, 2026
2 checks passed
@pjm314159
pjm314159 deleted the chore/perf-optimize branch September 27, 2026 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant