Moving Railway's Frontend Off Next.js
Bài tóm tắt Railway 2026 2. Tăng trưởng Độ khó: Dễ
Railway · 2026 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Bối cảnh
- Next.js đưa railway.com từ số 0 tới hàng triệu user mỗi tháng, nhưng build frontend vượt 10 phút (riêng Next.js 6 phút) với một team ship nhiều lần mỗi ngày. App chủ yếu chạy phía client (dashboard có trạng thái, canvas real-time, websocket khắp nơi); các primitive server-first không dùng tới, layout trên Pages Router phải chắp vá, còn App Router thì đẩy hẳn về server-first.
Thay đổi chính
- Chuyển sang Vite + TanStack Start/Router: route có kiểu, layout là primitive thật, HMR tức thì, SSR chỉ cho trang marketing/changelog.
- Hai PR, không downtime (hơn 200 route): PR 1 gỡ mọi phụ thuộc riêng của Next.js (
next/image,next/head,next/router) sang API trình duyệt hoặc thư viện trung lập, chưa đổi framework; PR 2 mới đổi framework, tách phần không phải routing khỏi file trang rồi sinh route từ cây trang cũ; Nitro làm lớp server, gom hơn 500 redirect, header bảo mật, luật cache vào một chỗ. Merge sáng Chủ nhật, cả team dùng thử ngay với "war room" trên Discord. - Từ bỏ: tối ưu ảnh dựng sẵn (thay bằng tối ưu ảnh ở edge của Fastly), vài thư viện hệ sinh thái (tự viết thay), độ trưởng thành.
- Fastly phục vụ phần lớn traffic từ edge; mỗi module là một chunk băm theo nội dung nên đổi một phần chỉ vô hiệu chunk đó.
Kết quả (theo Railway)
- Build từ hơn 10 phút xuống dưới 2 phút; dev server khởi động gần như tức thì.
Bài học cho SWE
- Đổi framework theo hai bước: gỡ phụ thuộc vào framework trước (không đổi hành vi), rồi mới đổi framework.
- Chọn framework theo hình dạng sản phẩm (client-first hay server-first), không theo mặc định của hệ sinh thái.
Liên quan
#Next.js#Vite#TanStack Start#Client-first SPA#Build time#Hai PR#Bỏ phụ thuộc framework trước#Nitro#Edge cache#Content-hashed chunk
Được nhắc tới trong
Chủ đề (2)
Công ty (1)
Bài tóm tắt (3)