Edge Computing SSR: Tối Ưu Latency Web App Việt Với Next.js 2026

6 tháng trước · 10 phút đọc
Edge computing là gì và tại sao app Việt cần nó?
Mình đã từng nhìn DevTools và thấy TTFB 800ms trên mạng Viettel. Không phải code chậm - mà request đang bay từ Hà Nội sang Singapore rồi mới quay về. Đó là vấn đề của mô hình server truyền thống: bạn deploy ở 1 nơi, người dùng ở khắp nơi.
Edge computing giải quyết đúng chỗ đau này. Thay vì chạy SSR trên origin server ở một region cố định, code của bạn được deploy ra hàng chục - hàng trăm điểm hiện diện (PoP - Point of Presence) rải khắp thế giới. Request từ TP.HCM sẽ được xử lý tại node gần nhất, không cần vòng vèo qua Mỹ hay châu Âu.
Request từ Hà Nội không cần bay sang Singapore nữa - edge node xử lý tại chỗ
Với Next.js, điều này có nghĩa SSR chạy ngay tại edge, không phải origin. Kết quả? TTFB giảm mạnh, đặc biệt trên mobile 4G/5G của Viettel hay VNPT - nơi mỗi mili-giây đều có giá.
Con số 94.3% (DataReportal) người dùng internet Việt Nam truy cập web chủ yếu qua mobile. Nếu app bạn build chạy chậm trên điện thoại, bạn đang mất người dùng ngay từ lần đầu tiên họ mở trang.
Vercel vs Netlify Edge: Chọn cái nào cho Next.js?
Hai nền tảng này đều support Next.js edge deployment tốt, nhưng trade-off khác nhau rõ ràng.
| Vercel | Netlify | |
|---|---|---|
| Edge Runtime | V8 Isolates | Deno |
| TTFB trung bình | ~70ms | ~90ms |
| Next.js SSR/ISR | First-class (cùng team) | Feature parity |
| Syntax env var | process.env.X |
Netlify.env.get('X') |
| Function timeout | 10s (free), 5 phút (Pro) | 10s (free), 15 phút (background) |
| Cold start | Gần zero (V8 isolates) | Thấp (Deno precompile) |
| Điểm mạnh | Realtime SSR, middleware | Async tasks, background jobs |
Vercel nhanh hơn cho SSR thuần, Netlify linh hoạt hơn cho background tasks
Nếu bạn build realtime app - chat, live feed, personalized content - chọn Vercel. V8 isolates có cold start gần bằng không, TTFB ~70ms là con số ổn định cho production. Vercel cũng tự sinh ra Next.js nên mọi feature mới (App Router, Partial Prerendering, Server Actions) đều được support đầu tiên.
Nếu app cần background processing - gửi email, xử lý hàng đợi, webhook có timeout dài - Netlify xử lý tốt hơn với background functions lên đến 15 phút. Netlify cũng dùng Deno nên TypeScript native, không cần config thêm.
Một điểm thực tế: nếu bạn đang dùng Vercel và muốn migrate sang Netlify, có tool tự động convert Edge Functions. Nhưng lưu ý syntax khác nhau, đặc biệt cách đọc env vars và geolocation API.
Với app Việt nhắm vào mobile users trên Viettel/VNPT/Mobifone, cả hai platform đều có hơn 100 PoP global với coverage ở Đông Nam Á. Vercel có edge node tại Singapore (gần VN nhất), Netlify dùng shared enterprise network tương tự.
Thiết lập Edge Functions trên Vercel với Next.js
Bắt đầu với Vercel - đây là path ít friction nhất nếu bạn đang dùng Next.js App Router.
1. Khai báo Edge Runtime cho Route
Thêm runtime export vào bất kỳ Route Handler hoặc Server Component nào:
2. Middleware chạy 100% ở edge
File middleware.ts ở root luôn chạy trên edge runtime:
Middleware chạy trước mọi request - logic nhẹ ở đây, không xử lý nặng
3. Cache response để giảm compute
Edge function chạy nhanh nhưng vẫn tốn compute. Với nội dung semi-dynamic, dùng Cache-Control hoặc next/cache:
Một lưu ý quan trọng: Edge Runtime không hỗ trợ toàn bộ Node.js API. Không có fs, không có child_process, không có native addons. Nếu code đang dùng những thứ này, bạn cần refactor hoặc chuyển sang Serverless Functions thông thường.
Thiết lập Edge Functions trên Netlify
Netlify dùng Deno runtime, nên syntax hơi khác. Không khó, nhưng cần biết trước để tránh debug mất thời gian.
Tạo edge function cơ bản:
Routing qua netlify.toml:
Netlify Edge dùng Deno - đọc kỹ docs API vì syntax khác Node.js
Điểm mạnh của Netlify là background functions - chạy async sau khi response đã trả về user:
Khi người dùng Việt submit form đăng ký, response trả về ngay (202 Accepted), còn email confirmation chạy ở background. Đây là pattern phù hợp với realtime apps - không block UI vì server đang xử lý.
Nếu project bạn đang dùng Next.js trên Vercel và muốn thử Netlify, có thể tham khảo Hướng dẫn migrate Next.js từ Vercel sang Netlify để biết cách migrate.
Benchmark thực tế và chiến lược đo latency app Việt
Con số 70% giảm latency không phải magic - nó xuất phát từ việc loại bỏ hàng trăm ms round-trip không cần thiết. Nhưng để đạt được, bạn cần đo đúng.
Các metrics quan trọng cần theo dõi:
- TTFB (Time to First Byte): Thời gian từ lúc browser gửi request đến byte đầu tiên nhận được. Đây là metric bị ảnh hưởng nhiều nhất bởi edge deployment.
- FCP (First Contentful Paint): Người dùng thấy nội dung đầu tiên. Liên quan đến TTFB nhưng còn phụ thuộc render path.
- LCP (Largest Contentful Paint): Core Web Vital quan trọng nhất với SEO Google.
Tool đo từ Việt Nam:
Thay vì chỉ dùng Lighthouse local, bạn cần đo từ các điểm thực tế tại VN:
Hoặc dùng WebPageTest - Đo tốc độ từ Việt Nam để test trực tiếp từ nhiều điểm tại Việt Nam.
So sánh TTFB trước và sau khi chuyển sang edge - số liệu tự đo mới tin được
Benchmark thực tế Vercel Edge vs Origin:
Vercel ghi nhận 70 ms (Clarifai Blog: Vercel vs Netlify in 2026) TTFB trung bình cho edge functions, so với 200-400ms với serverless functions thông thường. Tuy nhiên, con số này đo từ các region phương Tây. Với Việt Nam, kết quả phụ thuộc vào:
- ISP: Viettel có peering tốt hơn VNPT với một số CDN
- Thời điểm trong ngày: giờ cao điểm tối (8-10pm) thường chậm hơn
- Network type: WiFi vs 4G vs 5G cho kết quả khác nhau
Checklist tối ưu trước khi benchmark:
- Xác nhận route đang thật sự chạy edge (
export const runtime = 'edge') - Kiểm tra không có import nào dùng Node.js-only API
- Bật cache headers phù hợp cho semi-static content
- Dùng streaming response cho large payloads thay vì chờ toàn bộ data
- Prefetch DNS và preconnect đến external APIs bạn gọi từ edge function
Một pattern mình thấy hiệu quả: dùng Streaming SSR thay vì chờ full render. React 18 + Next.js App Router support Suspense boundaries, cho phép browser bắt đầu render HTML shell ngay trong khi data vẫn đang fetch.
Realtime app pattern với Edge SSR: Chat và live feed
Đây là use case mình thấy nhiều nhất khi người ta hỏi "edge có cần thiết không?". Câu trả lời: với realtime, có, rõ ràng.
Vấn đề của realtime app trên centralized server: mỗi poll hoặc WebSocket handshake đều phải đi về origin. Với 10.000 concurrent users tại VN, mỗi request bay qua 2-3 hop trước khi chạm server.
Streaming response từ Edge:
Server-Sent Events từ edge - browser nhận data ngay khi có, không cần polling
Client-side nhận stream:
Pattern này dùng Server-Sent Events (SSE) thay vì WebSocket vì SSE hoạt động qua HTTP/2, dễ đi qua proxy và firewall hơn, phù hợp với hạ tầng mạng Việt Nam. WebSocket thỉnh thoảng bị một số ISP throttle.
Còn nếu bạn muốn nền tảng vững chắc để build app fullstack với Next.js từ đầu, khóa Frontend NextJS tại F8 cover App Router, SSR, và các patterns thực tế như thế này theo từng bước.
Giờ bạn đã có đủ để bắt tay vào:
- Thêm
export const runtime = 'edge'vào các route cần tốc độ - Deploy lên Vercel (realtime/SSR) hoặc Netlify (background tasks) tùy use case
- Đo TTFB từ Việt Nam với WebPageTest - không đoán mò
- Implement SSE thay vì polling cho realtime features
Gặp vấn đề gì trong quá trình setup, drop comment. Mình hay lướt qua.
