KIếN THứC WEBSITE › PERFORMANCE

TTFB deep-dive — 6 layer pipeline và 4 chiến lược tối ưu cho shop VN

TTFB deep-dive — 6 layer pipeline và 4 chiến lược tối ưu cho shop VN

TTFB (Time to First Byte) là thời gian từ yêu cầu điều hướng đến byte HTML đầu tiên về client — chiếm 20–40% ngân sách LCP. Ngưỡng “Tốt” của Google là dưới 800ms ở phân vị p75.

Pipeline TTFB — phân tích 6 bước

Pipeline TTFB — phân tích 6 bước
Sơ đồ minh hoạ — Pipeline TTFB — phân tích 6 bước

TTFB không phải chỉ số đơn lẻ — là tổng của 6 bước độc lập. Hiểu từng bước giúp xác định đúng điểm nghẽn thay vì sửa ngẫu nhiên.

Sửa sai tầng là lỗi phổ biến nhất: nhiều shop bỏ tiền nâng cấp hosting trong khi bottleneck thực sự nằm ở thiếu page cache.

Pipeline chi tiết với độ trễ điển hình

Người dùng HCM → Site hosting Singapore (DC SG):

Bước 1: DNS lookup         → 20–50ms   (cache hit: 0ms)
Bước 2: TCP connection     → 30–60ms   (1 RTT)
Bước 3: TLS handshake      → 40–80ms   (TLS 1.3: 1 RTT, TLS 1.2: 2 RTT)
Bước 4: Server-side time   → 200–1500ms (truy vấn DB, PHP exec, cache miss)
Bước 5: Network transfer   → 10–30ms   (header bytes về client)
Bước 6: Client receive     → 5–10ms    (trình duyệt bắt đầu phân tích)

Tổng điển hình: 305–1730ms
Mục tiêu pass: < 800ms (p75)

3 nguồn dữ liệu để đo TTFB

  • Dữ liệu lab (PSI/Lighthouse): chạy đơn lẻ, không đáng tin cho môi trường production.
  • Dữ liệu thực tế (CrUX): p75 từ người dùng thật, 28 ngày — Google dùng cái này để xếp hạng.
  • RUM (Cloudflare Analytics, web-vitals): realtime, phân đoạn theo vùng và thiết bị.

Lớp 1–3 — DNS, TCP và TLS

Lớp 1–3 — DNS, TCP và TLS
Lớp 1–3 — DNS, TCP và TLS

3 lớp mạng chiếm khoảng 100–200ms TTFB. Tối ưu chủ yếu qua việc chọn nhà cung cấp đúng và cấu hình protocol mới hơn.

Lớp này dễ sửa nhất nhưng tác động có giới hạn — không giải quyết được vấn đề nếu Lớp 4 (server-side) đang trên 1s.

DNS lookup — cache và resolver nhanh

  • Dùng DNS provider Cloudflare (1.1.1.1) hoặc Google (8.8.8.8) — độ trễ anycast dưới 30ms toàn cầu.
  • TTL bản ghi DNS: 1–24h cho tên miền ổn định, 5–15 phút khi đang chuyển hosting.
  • Thêm DNS prefetch hint cho tên miền bên thứ ba: <link rel="dns-prefetch" href="//cdn.example.com">.

TCP — chuyển sang HTTP/2 hoặc HTTP/3

  • HTTP/1.1: mỗi tài nguyên một kết nối riêng — không multiplex, chậm.
  • HTTP/2: một kết nối multiplex nhiều tài nguyên — giảm thời gian tải 30–50%.
  • HTTP/3 (QUIC): dựa trên UDP, 0-RTT cho người dùng quay lại — giảm thêm 100–200ms.
  • Kiểm tra hỗ trợ: hosting hiện đại (Vultr, DigitalOcean) hoặc Cloudflare proxy bật QUIC mặc định.

TLS — TLS 1.3 và session resumption

  • TLS 1.2: bắt tay 2 RTT (~80–160ms).
  • TLS 1.3: bắt tay 1 RTT (~40–80ms), 0-RTT cho người dùng quay lại.
  • TLS session resumption cache: cùng client trong 24h → tái dùng phiên, bỏ qua bắt tay.

Lớp 4 — Server-side time (điểm nghẽn chính)

Lớp 4 chiếm 60–80% TTFB cho shop WordPress thông thường. Đây là lớp có tác động tối ưu lớn nhất nhưng cũng phức tạp nhất — cần audit từ database đến PHP đến cache.

Phần lớn shop VN thất bại ở đây do thiếu cache, không phải do hosting kém.

3 thành phần của server-side time

Thành phần Tỷ lệ (điển hình) Điểm nghẽn phổ biến
Truy vấn database 30–50% Loop trong loop, thiếu index, JOIN nặng
Thực thi PHP 20–40% Plugin nặng, không có opcache, autoload nhiều class
Cache miss và render 10–30% Page cache không hit, tải toàn bộ WP mỗi request

Tối ưu tầng database

  • Object cache Redis: giảm truy vấn database đáng kể, dùng plugin “Redis Object Cache” chính thức.
  • Plugin Query Monitor (môi trường dev): xác định truy vấn chậm trên 50ms.
  • Index database: thêm index cho meta_key thường truy vấn (ví dụ _stock_status).
  • Giới hạn post revisions: define('WP_POST_REVISIONS', 5); — giảm phình cơ sở dữ liệu.

Tối ưu tầng PHP

  • PHP 8.2+ và opcache: bật opcache trong php.ini — giảm thời gian thực thi PHP đáng kể.
  • OPcache.preload: preload class framework khi PHP-FPM khởi động (PHP 7.4+).
  • Tắt plugin không dùng: mỗi plugin active tải thêm class. Audit và tắt những plugin không cần thiết.
  • Plugin chỉ dành cho admin: không để chạy trên giao diện frontend.

Page cache — bắt buộc cho shop VN

  • LiteSpeed Cache (miễn phí, chỉ dùng với hosting LiteSpeed): cache tương tự nginx.
  • WP Rocket ($59/năm): cache + minify + lazy load tất cả trong một.
  • Cloudflare APO ($5/tháng): cache HTML tại edge, TTFB giảm xuống dưới 100ms toàn cầu.
  • W3 Total Cache (miễn phí): cũ hơn nhưng vẫn hoạt động, cấu hình phức tạp hơn.

Xem hướng dẫn chi tiết tại Redis cache cho WordPress và WooCommercecấu hình CDN Cloudflare cho shop VN.

Ngưỡng TTFB — shop VN điển hình

Bảng dưới đây là ngưỡng tham chiếu theo cấu hình hosting và cache. Dùng để so sánh với số liệu hiện tại của site trước khi quyết định đầu tư nâng cấp.

Số liệu thực tế khác nhau tùy tải server và thời điểm đo. Luôn dùng CrUX p75 làm cơ sở, không dùng kết quả đơn lẻ từ PSI.

TTFB theo cấu hình hosting và cache

Cấu hình TTFB p75 Chi phí/tháng Khuyến nghị
Hosting dùng chung, không cache 1800–3500ms 50–150k Không dùng cho shop thật
Hosting dùng chung + LiteSpeed Cache 800–1500ms 100–200k Tạm dùng cho giai đoạn phát triển
VPS DC Singapore + Redis + WP Rocket 300–600ms 500k–1tr Shop dưới 200 đơn/ngày
VPS DC HCM + Redis + Cloudflare APO 80–200ms 700k–1,5tr Shop 200–1000 đơn/ngày
Dedicated + Redis cluster + Cloudflare Enterprise 40–100ms 3–10tr Shop trên 1000 đơn/ngày

Tác động của TTFB đến trải nghiệm người dùng

  • Mỗi 100ms TTFB giảm tương ứng với tỉ lệ chuyển đổi cao hơn. Nguồn: nghiên cứu Google retail 2023 trên 2,5 triệu lượt xem trang.
  • TTFB trên 1s làm tăng tỉ lệ thoát trang, xếp hạng giảm dần qua 28 ngày.
  • TTFB dưới 200ms tạo cảm giác “tức thì”, giúp các chỉ số con LCP/INP/CLS dễ pass hơn.

4 chiến lược tối ưu TTFB theo quy mô shop

4 chiến lược tối ưu TTFB theo quy mô shop
Sơ đồ minh hoạ — 4 chiến lược tối ưu TTFB theo quy mô shop

Tối ưu TTFB không có công thức chung. Shop nhỏ dưới 100 đơn/ngày dùng chiến lược khác shop trên 1000 đơn/ngày.

Chọn đúng chiến lược theo quy mô để tối ưu hiệu quả đầu tư.

Đừng áp dụng giải pháp enterprise cho shop nhỏ — chi phí không tương xứng và phức tạp không cần thiết.

Chiến lược 1 — Shop nhỏ (dưới 100 đơn/ngày, dưới 50k lượt xem/tháng)

  • Hosting dùng chung tier cao (LiteSpeed) hoặc VPS Vultr Singapore $6/tháng.
  • LiteSpeed Cache (miễn phí) hoặc WP Rocket.
  • Cloudflare miễn phí — DNS và CDN cơ bản.
  • Object cache nếu hosting hỗ trợ Redis.
  • Mục tiêu TTFB: dưới 800ms.

Chiến lược 2 — Shop trung bình (100–500 đơn/ngày)

  • VPS DC Singapore RAM 4–8GB ($20–40/tháng).
  • Redis object cache + WP Rocket page cache.
  • Cloudflare APO ($5/tháng) — cache HTML tại edge.
  • CDN ảnh: ShortPixel hoặc Cloudflare Polish.
  • Mục tiêu TTFB: dưới 400ms.

Chiến lược 3 — Shop lớn (500–1000 đơn/ngày)

  • VPS DC HCM RAM 8–16GB hoặc Cloud (Vultr High Frequency).
  • Redis cluster + database read replica.
  • Cloudflare Pro ($20/tháng) + APO.
  • Nếu đang dùng Elementor: cân nhắc chuyển sang Astra + Gutenberg để giảm JS nặng.
  • Mục tiêu TTFB: dưới 200ms.

Chiến lược 4 — Shop enterprise (trên 1000 đơn/ngày)

  • Máy chủ chuyên dụng hoặc Kubernetes cluster.
  • Redis cluster + database master-slave + read replica.
  • Cloudflare Enterprise + WAF rules tùy chỉnh.
  • WordPress Headless + Next.js frontend cho hiệu năng tối đa.
  • Theo dõi RUM 24/7, cảnh báo trong vòng 5 phút khi TTFB tăng bất thường.
  • Mục tiêu TTFB: dưới 100ms.

Checklist tối ưu TTFB cho shop VN

  1. Đo TTFB baseline qua PSI tab “Origin” (CrUX 28 ngày) trước khi thay đổi bất cứ điều gì.
  2. Xác định bước nào trong pipeline đang chiếm nhiều thời gian nhất.
  3. Bật page cache — LiteSpeed Cache hoặc WP Rocket tùy hosting.
  4. Bật Redis object cache nếu hosting hỗ trợ.
  5. Dùng DNS Cloudflare và bật HTTPS.
  6. Kiểm tra hosting có hỗ trợ HTTP/2 chưa.
  7. Cập nhật PHP lên 8.2+ và bật opcache.
  8. Audit và tắt plugin không cần thiết trên frontend.
  9. Cân nhắc Cloudflare APO nếu shop trên 100 đơn/ngày.
  10. Cân nhắc chuyển VPS DC gần người dùng nếu TTFB vẫn trên 800ms sau khi đã làm các bước trên.
  11. Đo lại TTFB sau mỗi thay đổi, so sánh với baseline.

Bài liên quan

Câu hỏi thường gặp

TTFB 1,5s nhưng LCP vẫn 2s — có thể không?

Có thể, mặc dù hiếm. LCP = TTFB + thời gian hiển thị nội dung.

Nếu TTFB 1,5s mà LCP chỉ 2s, thời gian hiển thị chỉ 0,5s — rất nhanh.

Lý do thường gặp: CrUX p75 của TTFB và LCP được đo độc lập trên các phiên khác nhau. Tin tưởng LCP vì đây là chỉ số xếp hạng cuối cùng.

Cloudflare proxy có làm chậm TTFB không?

Không, nếu cấu hình đúng. Free tier có overhead 10–30ms nhưng bù lại bằng cache, bảo vệ DDoS và tăng tốc DNS.

APO ($5/tháng) cache HTML tại edge, giảm TTFB 50–90% so với origin server.

VPS RAM 1–2GB chạy WooCommerce được không?

Khó cho shop trên 50 đơn/ngày. RAM 2GB chỉ đủ cho PHP-FPM và MySQL cơ bản, không còn chỗ cho Redis cache.

Khuyến nghị tối thiểu 4GB cho shop đang hoạt động thực tế.

Hosting VN hay Singapore — chọn cái nào?

Singapore (Vultr, DigitalOcean) ổn định hơn, mạng quốc tế tốt, ping HCM 30–50ms. VN (VinaHost, P.A) ping 5–15ms từ HCM nhưng đôi khi có sự cố DC ảnh hưởng thời gian hoạt động.

Shop bán 100% nội địa: VN. Shop có khách quốc tế hoặc cần uptime cao: Singapore.

Chuyển hosting tránh gián đoạn thế nào?

Hạ TTL DNS xuống 300s trước 24 giờ. Đồng bộ database và file xuống hosting mới.

Chuyển DNS vào giờ lưu lượng thấp (3–5 giờ sáng). Giữ hosting cũ chạy song song 48 giờ để dự phòng.

Dùng Cloudflare proxy giúp người dùng gần như không bị gián đoạn trong quá trình chuyển.

Cần audit TTFB toàn diện và thiết lập pipeline hosting và cache cho shop online VN? Xem dịch vụ audit hiệu năng của Web22.