Hiệu suất Web (Web Performance) là gì?

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ểmWeb Performance TốtWeb 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 VitalsLCP (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ùngMượ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 ảnhHì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 đổiThườ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ừ ServerTTFB (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ã xong
  • sync → 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
Mục lục
Lên đầu trang