So sánh SSG, ISR, và SSR trong Next.js
Khi làm việc với Next.js, một trong những quyết định quan trọng nhất ảnh hưởng đến hiệu suất, SEO và trải nghiệm người dùng chính là:
Chọn phương pháp render nào cho từng trang?
Next.js cung cấp ba chiến lược render phổ biến:
- Static Site Generation (SSG)
- Incremental Static Regeneration (ISR)
- Server-Side Rendering (SSR)
Mỗi phương pháp có ưu và nhược điểm riêng. Trong bài viết này, chúng ta sẽ cùng:
- Hiểu rõ từng phương pháp
- So sánh sự khác nhau
- Biết khi nào nên dùng SSG, ISR hay SSR
Tổng quan: Next.js render trang như thế nào?
Trước tiên, cần hiểu một điều quan trọng:
Render trong Next.js là quyết định thời điểm HTML được tạo ra.
- Tạo HTML khi build → SSG
- Tạo HTML khi build + cập nhật dần → ISR
- Tạo HTML mỗi lần có request → SSR
Từ đó, hiệu suất và cách cập nhật dữ liệu sẽ hoàn toàn khác nhau.
1. Static Site Generation (SSG)
SSG là gì?
SSG (Static Site Generation) tạo ra HTML ngay tại thời điểm build.
Sau khi build xong, các trang chỉ đơn giản là file HTML tĩnh được serve cho người dùng.
Khi user truy cập:
- Không cần xử lý logic trên server
- Không gọi API để render HTML
- Chỉ trả về file tĩnh đã có sẵn
- Ưu điểm của SSG
Ưu điểm của SSG
- ✅ Hiệu suất cực cao
- Trang load rất nhanh vì không cần render lại.
- ✅ SEO rất tốt
- HTML đã có sẵn nội dung → bot dễ crawl.
- ✅ Giảm tải server
- Không có render mỗi request.
Nhược điểm của SSG
❌ Không phù hợp cho nội dung thay đổi thường xuyên
Nếu dữ liệu thay đổi → cần build lại.
❌ Build time dài
Với website lớn (hàng ngàn trang), build có thể rất chậm.
Khi nào nên dùng SSG?
- Blog cá nhân
- Landing page
- Trang giới thiệu sản phẩm
Documentation
Nội dung ít thay đổi, ưu tiên tốc độ và SEO
2. Incremental Static Regeneration (ISR)
ISR là gì?
ISR (Incremental Static Regeneration) là phiên bản nâng cấp của SSG.
ISR cho phép:
- Trang vẫn được generate như static
- Nhưng có thể tự động cập nhật lại sau một khoảng thời gian
- Không cần rebuild toàn bộ website
Cơ chế hoạt động:
- Trang được build lần đầu
- Sau revalidate giây → request tiếp theo sẽ tạo HTML mới
- HTML mới được cache và dùng cho các request sau
- Ưu điểm của ISR
Ưu điểm của ISR
✅ Hiệu suất cao như SSG
Vẫn là trang tĩnh được cache.
✅ Có thể cập nhật nội dung
Không cần rebuild toàn bộ app.
✅ Rất phù hợp cho website lớn
Hàng trăm, hàng nghìn trang vẫn tối ưu.
Nhược điểm của ISR
❌ Không cập nhật tức thời
Có độ trễ giữa lúc data thay đổi và lúc trang được regenerate.
❌ Cần cẩn thận hydration
Nếu data server và client không đồng bộ, có thể gây warning.
Khi nào nên dùng ISR?
- Blog, trang tin tức
- Danh sách sản phẩm
- Trang category
- Website nội dung lớn nhưng không cần realtime
Nội dung thay đổi theo chu kỳ, vẫn muốn tốc độ cao
3. Server-Side Rendering (SSR) SSR là gì?
SSR (Server-Side Rendering) render HTML mỗi lần có request từ người dùng.
Khi user truy cập:
- Server fetch data
- Render HTML mới
- Trả HTML về client
- Ưu điểm của SSR
Ưu điểm của SSR
✅ Dữ liệu luôn mới nhất
Mỗi request đều render lại.
✅ Phù hợp với nội dung cá nhân hóa
Ví dụ:
- Dashboard
- Trang theo user
- Giá theo thời gian thực
✅ SEO tốt hơn CSR
HTML có sẵn nội dung khi trả về.
Nhược điểm của SSR
❌ Chậm hơn SSG và ISR
Vì phải render trên server mỗi request.
❌ Tăng tải server
Traffic lớn → server dễ quá tải.
❌ TTFB cao hơn
Người dùng phải chờ server xử lý.
Khi nào nên dùng SSR?
- Trang cá nhân hóa theo user
- Dữ liệu realtime
- Trang cần bảo mật
- Dashboard, admin panel
Nội dung thay đổi liên tục, cần luôn mới
4. So sánh SSG, ISR và SSR
Phương pháp Tốc độ tải Cập nhật nội dung SEO Phù hợp với
SSG 🚀 Rất nhanh ❌ Build lại ✅ Tốt Blog, landing page
ISR 🚀 Rất nhanh 🔄 Theo chu kỳ ✅ Tốt Tin tức, sản phẩm
SSR 🕒 Chậm hơn ✅ Luôn mới ✅ Tốt Cá nhân hóa, realtime
5. Nên chọn SSG, ISR hay SSR?
Không có phương pháp nào là “tốt nhất cho mọi trường hợp”.
Chỉ có phương pháp phù hợp nhất.
Chọn SSG nếu:
- Nội dung ít thay đổi
- Ưu tiên tốc độ và SEO
- Không cần realtime
Chọn ISR nếu:
Nội dung có cập nhật
Không cần realtime
Website lớn, nhiều trang
Chọn SSR nếu:
- Dữ liệu thay đổi liên tục
- Cần cá nhân hóa theo user
- Nội dung phụ thuộc request
Best practice:
Trong một project Next.js, bạn hoàn toàn có thể kết hợp cả SSG + ISR + SSR cho từng trang khác nhau.




Leave a Reply