Hiệu suất web là gì?
Hiệu suất web (Web Performance) là khả năng một website tải nhanh, phản hồi mượt và mang lại trải nghiệm tốt cho người dùng.
Khi người dùng truy cập một trang web, họ không quan tâm bạn dùng công nghệ gì. Thứ họ thực sự cảm nhận là:
- Nội dung có hiển thị ngay không?
- Trang có load nhanh không?
- Có bị giật, lag khi thao tác không?
Nói đơn giản:
Người dùng vào web → thấy nội dung nhanh → thao tác mượt → không khó chịu
Trong thực tế, người dùng cực kỳ thiếu kiên nhẫn. Chỉ cần chậm vài giây, họ có thể rời đi ngay lập tức.
Tại sao hiệu suất web quan trọng?
Hiệu suất web không chỉ là “nhanh hơn”, mà ảnh hưởng trực tiếp đến toàn bộ hệ thống:
Trải nghiệm người dùng (UX)
Website chậm → người dùng khó chịu → thoát trang nhanh
SEO (Google Ranking)
Google ưu tiên các website có hiệu suất tốt, đặc biệt thông qua Core Web Vitals
Tỷ lệ chuyển đổi (Conversion)
Website nhanh → người dùng ở lại lâu hơn → tăng khả năng mua hàng / đăng ký
Chi phí hệ thống
Website tối ưu → giảm tài nguyên server → tiết kiệm chi phí vận hành
Tốc độ tải trang quan trọng như thế nào?
Tốc độ tải trang (Page Speed) là thời gian để hiển thị nội dung cho người dùng.
- Dưới 3 giây → tốt
- Trên 5 giây → tỷ lệ thoát tăng mạnh
Nhanh hơn luôn tốt hơn.
| Đặc điểm | Web Performance Tốt | Web Performance Kém |
| Tốc độ tải (Load Time) | Dưới 2 giây. Trang web xuất hiện gần như tức thì. | Trên 5-10 giây. Người dùng phải chờ đợi lâu. |
| Chỉ số Core Web Vitals | LCP (tải nội dung chính) nhanh, CLS (độ ổn định bố cục) thấp, INP (phản hồi tương tác) tốt. | LCP chậm, các phần tử nhảy loạn xạ khi tải (CLS cao), phản hồi chuột/phím bị trễ. |
| Trải nghiệm người dùng | Mượt mà, tạo cảm giác tin tưởng và chuyên nghiệp. | Gây ức chế, người dùng dễ dàng thoát trang (Bounce rate cao). |
| Tối ưu hóa hình ảnh | Hình ảnh được nén, dùng định dạng hiện đại (WebP, Avif) và có lazy-loading. | Hình ảnh dung lượng lớn, định dạng cũ, tải tất cả cùng một lúc gây nghẽn mạng. |
| Mã nguồn (Code) | Minified JS/CSS, loại bỏ code thừa, tận dụng bộ nhớ đệm (Caching). | Code rác nhiều, quá nhiều thư viện bên thứ ba không cần thiết. |
| SEO & Chuyển đổi | Thường có thứ hạng cao trên Google và tỷ lệ mua hàng/đăng ký tốt hơn. | Bị Google đánh tụt hạng, mất khách hàng tiềm năng do tốc độ chậm. |
| Phản hồi từ Server | TTFB (Time to First Byte) thấp, server phản hồi nhanh. | Server xử lý chậm, cấu hình kém hoặc quá tải. |
Web hoạt động như thế nào? (Critical Rendering Path)
Để tối ưu hiệu suất, bạn cần hiểu cách trình duyệt render một trang web:
Bước 1: Gửi request
Người dùng nhập URL → trình duyệt gửi request đến server
Bước 2: Nhận HTML
Server trả về HTML (khung xương của trang)
Bước 3: Parse HTML → DOM
Trình duyệt phân tích HTML → tạo DOM (Document Object Model)
Bước 4: Tải CSS và JavaScript
- CSS → tạo CSSOM
- JS → có thể thay đổi DOM/CSSOM
Bước 5: Render
- DOM + CSSOM → Render Tree
- Layout → xác định vị trí
- Paint → vẽ pixel
- Composite → hiển thị lên màn hình
Toàn bộ quá trình này gọi là Critical Rendering Path
Core Web Vitals – Các chỉ số quan trọng
Google đưa ra 3 chỉ số chính để đánh giá hiệu suất:
- LCP (Largest Contentful Paint)
→ Thời gian hiển thị nội dung chính - FID (First Input Delay)
→ Độ trễ khi người dùng tương tác - CLS (Cumulative Layout Shift)
→ Độ ổn định layout (tránh giật)

Các yếu tố ảnh hưởng đến hiệu suất
Render Blocking
CSS là tài nguyên chặn hiển thị vì trình duyệt phải tải xong CSS mới render được.
Parser Blocking
JS (không có async/defer) sẽ chặn việc parse HTML.
Preload Scanner
Trình duyệt có cơ chế quét trước HTML để tải sớm tài nguyên quan trọng (CSS, JS, image)
Tối ưu CSS
CSS ảnh hưởng trực tiếp đến thời gian render:
- Giảm kích thước file CSS
- Xoá CSS không dùng
- Tránh dùng
@import - Inline critical CSS nếu cần (viết trực tiếp vào thẻ <head> HTML)
Tối ưu JavaScript
JavaScript là nguyên nhân lớn gây chậm:
- Giảm dung lượng bundle
- Xoá code không cần thiết
- Dùng:
<script defer src="app.js"></script>
<script async src="analytics.js"></script>
Mục tiêu: không block main thread
Tối ưu tải tài nguyên (Resource Loading)
preconnect
Mở kết nối sớm cho tài nguyên quan trọng:
<link rel="preconnect" href="https://fonts.googleapis.com">
Thận trọng: thuộc tính “crossorigin” cho việc tải font chữ, vì bên trong đường dẫn mở một kết nối mới khi tải tệp font chữ xuống.
dns-prefetch
Resolve DNS trước:
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
preload
Tải ngay tài nguyên quan trọng:
<link rel="preload" href="/hero.jpg" as="image" fetchpriority="high">
Thận trọng: thuộc tính “crossorigin”, fetchpriority=”high”
prefetch
Tải trước cho tương lai:
<link rel="prefetch" href="/next-page.js">
Fetch Priority API
<img src="hero.jpg" fetchpriority="high">
Tối ưu hình ảnh
Responsive Images
<img
src="/image-500.jpg"
srcset="/image-500.jpg 500w, /image-1000.jpg 1000w"
sizes="(min-width: 768px) 500px, 100vw"
>
Định dạng ảnh
Các định dạng hình ảnh hiện đại như WebP và AVIF có thể nén tốt, giúp giảm kích thước tệp hình ảnh và do đó giảm thời gian tải xuống
Nén ảnh
- Lossy (nhẹ hơn)
- Lossless (giữ chất lượng)
picture
Giúp bạn linh hoạt hơn trong việc chỉ định nhiều đề xuất hình ảnh
<picture>
<source type="image/avif" srcset="image.avif">
<source type="image/webp" srcset="image.webp">
<img src="image.jpg">
</picture>
Lazy loading
Chỉ tải khi cần:
<img loading="lazy">
decoding
async→ không block render – giải mã không đồng bộ, cho phép nội dung khác (như văn bản, bố cục trang) hiển thị trước mà không phải chờ hình ảnh giải mã xongsync→ dùng cho ảnh quan trọng (hero) – giải mã đồng bộ, cách này phù hợp khi hình ảnh quan trọng nhất đối với trải nghiệm người dùng ngay khi tải trang (ví dụ: ảnh hero lớn trên cùng).auto→ mặc định nếu không chỉ định – Trình duyệt tự quyết định chế độ giải mã phù hợp nhất để đạt hiệu suất cao nhất
Tối ưu video
Video
- Dùng
.webmđể giảm dung lượng
Tối ưu iframe
<iframe loading="lazy"></iframe>
lazy: trì hoãn việc tải HTML của phần tử và các tài nguyên phụ của phần tử đó cho đến khi phần tử đó nằm trong một khoảng cách xác định trước so với khung nhìn.</p>
Web Worker – Tách khỏi main thread
Web Worker cho phép chạy JavaScript ở background thread:
- Giảm lag UI
- Tăng độ mượt
Tối ưu font chữ
- Tự host font (không phụ thuộc bên thứ 3)
- Chỉ dùng WOFF2
- Dùng
font-display
font-display: swap;
Các giá trị:
- block
- swap
- fallback
- optional
Code Splitting (Phân tách JavaScript)
Chia nhỏ JavaScript thành nhiều phần và chỉ tải khi cần.
Mục tiêu:
- Giảm JS ban đầu
- Tránh block main thread
- Cải thiện trải nghiệm
Kết luận
Hiệu suất web không chỉ là làm cho website nhanh hơn, mà là tối ưu toàn bộ trải nghiệm người dùng.
Một website tốt cần:
- Tải nhanh
- Phản hồi mượt
- Ổn định
