Khi xây dựng SaaS, chọn sai định dạng ảnh có thể làm giảm hiệu năng, trải nghiệm và tăng chi phí. Bài viết này cung cấp khuyến nghị cụ thể cho từng use case cùng ví dụ React/Next.js để bạn quyết định khi nào dùng JPEG, PNG, WebP, SVG (và cả AVIF, GIF).
Vì sao định dạng ảnh quan trọng?
Tác động hiệu năng
- Tốc độ tải: file nhỏ → load nhanh
- Băng thông: tiết kiệm dữ liệu/CDN
- UX: người dùng chờ ít hơn
- SEO: Core Web Vitals cải thiện
Số liệu đáng chú ý
- 53% user bỏ trang nếu load >3s
- WebP nhỏ hơn JPEG 25-35%
- SVG icon nhỏ hơn PNG 60-70%
- Ảnh tối ưu có thể giảm thời gian tải 40-60%
Bộ tứ định dạng cốt lõi
1. JPEG (.jpg/.jpeg) – Chuẩn cho ảnh chụp
Dùng khi
- Ảnh do user upload (avatar, nội dung)
- Banner marketing, hero nhiều màu
- Screenshot phức tạp
Thông số
- Nén có mất mát
- Không hỗ trợ trong suốt
- Chất lượng web lý tưởng: 75-85%
Ví dụ React
function UserAvatar({ userId, size = 'medium' }) {
const map = { small: '32', medium: '64', large: '128' };
return (
<img
src={`/api/users/${userId}/avatar.jpg?size=${map[size]}`}
alt="User avatar"
width={map[size]}
height={map[size]}
loading="lazy"
/>
);
}
2. PNG (.png) – Vua của hình trong suốt
Dùng khi
- Logo, brand asset
- UI cần nền trong suốt
- Screenshot chứa text
Đặc điểm
- Nén không mất mát
- Hỗ trợ alpha
- PNG-8 (≤256 màu), PNG-24 (16.7 triệu màu)
Ví dụ Next.js
import Image from 'next/image';
function CompanyLogo({ variant = 'light', size = 'medium' }) {
const dim = {
small: { width: 120, height: 40 },
medium: { width: 180, height: 60 },
large: { width: 240, height: 80 }
};
return (
<Image
src={`/images/logo-${variant}.png`}
alt="Company logo"
width={dim[size].width}
height={dim[size].height}
priority
/>
);
}
3. WebP (.webp) – Chuẩn hiện đại
Dùng khi
- Target browser hiện đại (90%+)
- App cần tối ưu hiệu năng/mobile
Ưu điểm
- Có cả nén lossy và lossless
- Hỗ trợ alpha và animation
- Nhỏ hơn JPEG 25-35%
Chiến lược triển khai
function OptimizedImage({ src, alt, ...props }) {
const webpSrc = src.replace(/\.(jpg|jpeg|png)$/, '.webp');
return (
<picture>
<source srcSet={webpSrc} type="image/webp" />
<img src={src} alt={alt} {...props} />
</picture>
);
}
4. SVG (.svg) – Vector scale vô hạn
Dùng khi
- Icon, logo, illustration vector
- Cần scale mọi kích thước
- Interactive graphics
Ví dụ React
function CheckIcon({ size = 24, color = 'currentColor' }) {
return (
<svg
width={size}
height={size}
viewBox="0 0 24 24"
fill="none"
stroke={color}
strokeWidth="2"
>
<polyline points="20,6 9,17 4,12" />
</svg>
);
}
Định dạng nâng cao
AVIF (.avif)
- Hỗ trợ ~73% browser (2024)
- Nhỏ hơn JPEG 50%, WebP 20%
- Chưa có trên Safari (2025)
- Dùng
<picture>với fallback WebP/JPEG
GIF (.gif)
- Animation đơn giản
- Cân nhắc WebP animation hoặc MP4 để giảm dung lượng
Đề xuất theo nền tảng
React
- Tổ chức
/public/imagesrõ ràng (hero/icons/screenshots…) - Dùng hook lazy load với IntersectionObserver
Next.js
- cấu hình
next.config.jsđể cho phép WebP/AVIF - Dùng
<Image>vớiplaceholder="blur",sizes - import dynamic với SSR=false cho component nặng
Mục tiêu dung lượng
| Use case | Dung lượng khuyến nghị | | --- | --- | | Hero desktop | 150-300KB (JPEG 80-85%) | | Hero mobile | 50-150KB (WebP) | | Thumbnail | 10-30KB | | Icon SVG | 1-5KB | | Avatar 64px | 5-15KB |
Quy trình nén
- CLI:
convert,cwebp,svgo - NPM script với imagemin + mozjpeg/pngquant/webp
- webpack kết hợp image-webpack-loader
Theo dõi hiệu năng
- Đo LCP (dưới 2.5s), FID (dưới 100ms), CLS (dưới 0.1)
- Tracking thời gian load ảnh bằng PerformanceObserver
- Theo dõi tổng dung lượng ảnh mỗi trang
Sai lầm thường gặp
- Dùng PNG cho ảnh chụp → tốn dung lượng
- Không có fallback → browser cũ không hiển thị
- Ảnh không responsive → mobile phải tải ảnh desktop
- Quên retina → hiển thị mờ trên màn hình 2x
QA & testing
- Checklist thủ công (hiển thị đúng, load nhanh, alt text)
- Jest test đảm bảo server trả WebP khi hỗ trợ
- Lighthouse để kiểm tra điểm “uses-optimized-images”
Kết luận
Hãy cân bằng 3 yếu tố: hiệu năng, chất lượng, tương thích. Bắt đầu với combo cơ bản (JPEG + PNG), rồi từng bước áp dụng WebP/AVIF khi hạ tầng sẵn sàng. Luôn theo dõi hiệu năng, cập nhật browser support và tối ưu workflow chia ảnh/convert. Định dạng đúng sẽ nâng tầm UX và hiệu quả kinh doanh của ứng dụng SaaS.


