雙籠體育的舊後端用 Prisma + NextAuth + Next.js,部署在 Vercel。一開始用起來很順,工具成熟、社群大、文件齊全,開發速度快。
流量一上來,Prisma 的冷啟動就變成問題。每次 Serverless 函式從閒置狀態被叫醒,Prisma Client 光初始化就要吃掉不少時間,延遲飆高,Vercel 的 Active CPU 用量也跟著爆,尖峰時段特別明顯。錢燒得快,體驗又差。參數、設定都試過了,這不是微調能解決的,是架構的天花板。
想搬去 Cloudflare Workers,靠邊緣運算繞過冷啟動。動手才發現,這套技術棧幾乎每個核心元件都跟 Edge Runtime 不合。
Prisma Client 依賴 Node.js 的原生模組,這在 Cloudflare Workers 的 V8 隔離環境裡跑不動。官方推出 Prisma Accelerate 想補這個洞,等於多包一層複雜度跟成本。Next.js 骨子裡以 Node.js 為出發點設計,雖然有 Edge Runtime 選項,一堆套件碰上去就不相容,硬遷移成本太高。NextAuth 也一樣,有些依賴項天生跑不進 Edge Runtime,Session 管理設計時沒把邊緣環境算進去。
於是決定重來。原則很簡單:每一層都選天生為邊緣運算而生的工具。
新的組合是 TanStack Start + Drizzle ORM + Better Auth + Cloudflare Workers,取代舊的 Next.js + Prisma + NextAuth + Vercel Serverless。
冷啟動延遲:Cloudflare Workers 平均在 10ms 以內,最差約 50ms;Vercel Functions 平均 200ms,最慘飆到 1.5 秒。ORM 這邊,Prisma 冷啟動落在 80–150ms,Drizzle 只要 50–100ms。Bundle size 差更多,Prisma 約 1.6MB,Drizzle 約 57KB。
TanStack Start 以 TanStack Router 為核心,跟 Vite 整合自然,對邊緣環境友善,不綁死特定平台。Drizzle ORM 輕量、型別安全,丟進 Edge Runtime 沒有 Prisma 那種初始化包袱。Better Auth 是為現代 TypeScript 專案打造的認證方案,邊緣環境支援完整,設定也有彈性。
這次重建也是一次實驗——大量靠 AI 加速整個遷移過程。從架構討論、寫程式碼,到整理技術文件,Claude Opus 4.8 幾乎全程參與。
Token 用量:Input 201k、Output 19M,Cache 讀了 785M、寫了 20.2M,總花費約新台幣 18,366 元。Cache Read 數字特別大,是因為我們把整個專案的技術規格、資料庫 Schema、設計決策文件全放進 context,每次對話都在完整理解專案的前提下進行,不用重講背景。研究新框架、處理型別問題、寫遷移腳本這幾塊,省下不少時間。
新版後端還在開發測試階段,正在把每個功能在新架構上跑穩,也在驗證 Cloudflare Workers 環境下的邊際情況。架構決策已完成,TanStack Start + Drizzle + Better Auth 的可行性驗證過了,核心功能正在遷移,用戶認證、資料層、API 端點都在搬。接下來是全面整合測試、效能基準測試跟邊緣環境相容性驗證,之後才會正式上線。
謝謝支持雙籠體育的大家,我們很快見。


