我们让 opolyx 更快了
骰子点数现在几乎瞬间出现,无论你身在何处页面都加载迅速,回合之间的等待也大幅减少。

通俗版
速度本身就是一项功能。我们投入了一整轮开发来让 opolyx 用起来更利落,你一坐到牌桌前就应该能感受到。
点一下"掷骰子",骰子立刻就活了起来——以前点数要花一秒半才能稳定下来,现在一眨眼就落定了。继续你的回合、购买地产、支付租金:这一切都在你操作的那一刻就有响应。
- 掷出之后,骰子点数几乎瞬间出现。
- 主页和指南从世界任何地方都加载迅速。
- 牌桌开局之后,回合之间的等待更少。
- 打开棋盘时不再有"the game server is waking up"的卡顿。
这一切都不会改变游戏的玩法——规则相同,棋盘相同。它只是更快地不再挡你的路。
技术细节
从点击到骰子点数显示的时间从 ~1.5s 降到了大约 0.3–0.75s。这里叠加了两个因素:响应到达之后约 ~700ms 的落定动画,以及一条缓慢的网络路径。我们把翻滚缩短到了 250ms,而且操作的玩家现在会在 0ms 时乐观地播放骰子,然后在 daemon 的权威状态和事件一返回就立即应用——无需等待更慢的 realtime 广播。
更大的收益在网络上。游戏服务器(daemon)授权的是玩家自己的 JWT,而不是某个服务器密钥,因此浏览器现在可以直接调用它,而不必绕经 Vercel 的 server action。直接调用会在 daemon 本地校验 HS256 令牌(signature、exp、audience)——身份验证从 ~40ms 降到了 ~1–5ms——并在出现任何错误时回退到 server action 中继,所以任何请求都绝不会被重复提交。
# Browser → daemon directly (with a verified server-action fallback)
NEXT_PUBLIC_DAEMON_URL=https://opolyxgame-daemon-production.up.railway.app
# Daemon verifies the player's token locally (HS256), ~40ms → ~1-5ms
SUPABASE_JWT_SECRET=<legacy HS256 secret from Supabase → Settings → API>在底层,daemon 和数据库现在挨在一起了:我们把生产环境的 Supabase 从 Tokyo 迁到了 Singapore,与 Railway 上的 daemon 同地部署,于是 daemon↔db 之间的调用都是本地的——身份验证从 ~200ms 降到 ~40ms,游戏处理从 ~250ms 降到 ~45ms。一个模块作用域的 node:https keep-alive Agent 在回合之间让这条连接保持温热(一个回合的第一次掷骰不再冷重连)。而且每一个营销页面和内容页面——home、how-to-play、rules、guide、各法律页面、sign-in——现在都按语言为全部十种语言做了预渲染,因此它们从 edge cache 提供,不再有冷启动的 lambda。
