我們讓 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。
