Skip to content

perf(arena): cut RPC polling load on the arena page#72

Merged
seven-feng merged 1 commit into
mainfrom
claude/optimize-arena-rpc-polling
Jun 9, 2026
Merged

perf(arena): cut RPC polling load on the arena page#72
seven-feng merged 1 commit into
mainfrom
claude/optimize-arena-rpc-polling

Conversation

@seven-feng

Copy link
Copy Markdown
Contributor

背景

演示时 ~10 人在线就把 Gravity RPC 节点 CPU 干到 800%。排查发现 arena 页的数据轮询(useArenaEngine)每 4s 都把大量不变 / 变化很慢的数据重新拉一遍,而且后台标签页照样轮询,于是 RPC 负载随观众人数线性增长。

注:经分析 arena 页并非 800% 的唯一主因(agent-runner 每实例 ~1600 eth_call/s 是更大的头),但这是低风险、可立即落地的一档优化,人越多省得越多。后续再处理 agent-runner / 共享快照 / Multicall3。

改动(Tier 1,纯前端,无行为变化)

仅改 frontend/src/hooks/useArenaEngine.ts:

改动 说明 省下
名字缓存 agent 名字创建后不变,只对新 agent 调 getAgent ~26 次/轮 → 0
已结算对局缓存 已结算且数据完整的 match 不可变,跳过 getMatch 重拉 ~18–20 次/轮 → ~2
tier 冷却降频 撮合冷却几十秒才变一次,改为最多 30s 拉一次;倒计时由前端本地每秒递减 ~7 次/轮 → ≈0
后台暂停 document.hidden 时暂停轮询,切回前台立即补刷 后台标签 → 0
轮询 4s → 8s 自动战斗天梯 8s 刷新足够 频率减半

效果

  • 每个活跃浏览器:~20.5 → ~5 eth_call/s(~4× ↓)
  • 每个后台标签:→ 0
  • 实时性不变:MatchSettled / MatchCreated 事件订阅保留,新战果仍即时显示。

测试

just frontend-start gravity

打开 /arena,F12 → Network:① 每秒请求数明显下降;② 切到别的标签 → 请求暂停;③ 切回 → 一波刷新后平稳。tsc --noEmit 通过(0 报错)。

🤖 Generated with Claude Code

useArenaEngine re-fetched immutable / slow-changing data on every 4s poll
and kept polling in backgrounded tabs, so RPC load scaled linearly with the
number of viewers and pegged the node during demos.

Tier 1 (frontend-only, no behavior change):
- Cache agent names (immutable after creation) — fetch once, not every poll
- Skip getMatch for already-settled, fully-hydrated matches (immutable data)
- Throttle tier-cooldown reads to 30s (the countdown ticks client-side)
- Pause polling while the tab is hidden; re-pull on refocus
- Poll interval 4s -> 8s

Per active browser ~20.5 -> ~5 eth_call/s (~4x); backgrounded tabs -> 0.
Live MatchSettled/MatchCreated subscriptions are unchanged, so fresh
results still appear immediately.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
gravity-town Ready Ready Preview, Comment Jun 9, 2026 7:19am

Request Review

@seven-feng seven-feng merged commit 1fc9ab3 into main Jun 9, 2026
6 checks passed
@seven-feng seven-feng deleted the claude/optimize-arena-rpc-polling branch June 9, 2026 07:22
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.

2 participants