Tối ưu hiệu suất ảnh với Next.js
12 tháng 11, 2024
1. Chọn định dạng ảnh thông minh
- Ưu tiên AVIF/WebP cho ảnh minh họa, JPEG chất lượng 75+ cho ảnh người.
- Dùng
next/imagesẽ tự động tạo nhiều định dạng, nhưng phải bậtformatstrongnext.config.mjs.
js
// next.config.mjs
const nextConfig = {
images: {
formats: ["image/avif", "image/webp"],
},
};
export default nextConfig;
2. Quản lý kích thước & layout
- Dùng
sizesđể trình duyệt biết độ rộng tối đa. - Với layout responsive, kết hợp
fillvà container cóposition: relative.
tsx
<div className="relative aspect-[16/9]">
<Image
src="/hero.png"
alt="Demo"
fill
sizes="(max-width: 768px) 100vw, 768px"
priority
/>
</div>
3. Lazy load & tính toán priority hợp lý
next/imagelazy load mặc định, chỉ setloading="eager"cho hero đầu trang.prioritychỉ nên dùng cho 1-2 ảnh quan trọng; lạm dụng dễ nghẽn network.
4. Tận dụng CDN & cache
- Nếu host trên Vercel,
next/imageđã có CDN. Deploy tự host thì có thể bậtloadertùy biến, ví dụ Cloudflare Image Resizing. - Cache header nên đủ dài (7-30 ngày) vì Next thêm hash vào URL.
5. Theo dõi bằng Lighthouse & WebPageTest
- Chạy Lighthouse trong DevTools, xem mục “Serve images in next-gen formats”.
- Dùng WebPageTest với tốc độ mạng 3G để đảm bảo LCP < 2.5s.
- Kết hợp
next/scriptđể defer script không cần thiết, giảm cạnh tranh bandwidth với ảnh.
Checklist cuối cùng
- Bật AVIF/WebP trong
next.config.mjs. - Cài
sizesvàpriorityhợp lý cho mọi<Image>. - Đảm bảo CDN hoặc loader backend hỗ trợ cache dài.
- Theo dõi LCP sau mỗi lần thêm ảnh mới.
