Họ đang đo gì
Bạn có theo dõi hiệu năng bằng dữ liệu thật của người dùng không, hay chỉ chạy Lighthouse một lần.
Trả lời ngắn~30 giây
LCP đo thời điểm phần tử nội dung lớn nhất hiện ra — tốt là ≤ 2,5 giây. INP đo độ trễ từ tương tác tới lần vẽ kế tiếp, thay cho FID từ tháng 3/2024 — tốt là ≤ 200ms. CLS đo mức dịch chuyển bố cục ngoài ý muốn — tốt là ≤ 0,1. Cả ba đánh giá ở phân vị 75 của lượt truy cập thật. Với LCP, bốn nguyên nhân chiếm gần hết: thời gian phản hồi của server, tài nguyên chặn render, ảnh LCP tải muộn, và font làm text hiện chậm.
HTML về tới nơi. Trình duyệt bắt đầu phân tích và ngay lập tức gặp các thẻ chặn render.
Giải thích sâu
Với ảnh LCP, lỗi phổ biến nhất không phải ảnh nặng mà là ảnh được PHÁT HIỆN muộn. Nếu ảnh nằm trong CSS background hoặc do JavaScript chèn vào, trình duyệt chỉ biết tới nó sau khi đã tải và chạy xong những thứ khác. Cách chữa rẻ nhất là đặt nó thành <img> thật trong HTML với fetchpriority="high", và tuyệt đối không loading="lazy" cho ảnh nằm trong màn hình đầu — đây là một trong những cách phổ biến nhất để tự làm hỏng LCP.
INP khó hơn LCP vì nó đo cả VÒNG ĐỜI của một tương tác: độ trễ đầu vào, thời gian chạy handler, và thời gian trình duyệt vẽ lại. Nghĩa là một handler nhanh vẫn cho INP tệ nếu nó gây ra một lần render lại tốn kém. Cách chữa thường là cắt công việc: cập nhật phần giao diện phản hồi ngay, rồi nhường luồng chính (await scheduler.yield() hoặc setTimeout) trước khi làm phần nặng, để trình duyệt kịp vẽ.
Điều quan trọng về cách đo: Lighthouse là dữ liệu phòng thí nghiệm trên một cấu hình giả lập, còn CrUX là dữ liệu người dùng thật và đó mới là thứ dùng để xếp hạng. Hai nguồn này thường bất đồng, và khi bất đồng thì dữ liệu thật đúng. INP đặc biệt khó đo bằng lab vì nó cần tương tác thật — Lighthouse không bấm vào gì cả, nên nó chỉ ước lượng.
Câu hỏi tiếp theo họ sẽ hỏi
?CLS thường do cái gì?
Ảnh không khai báo kích thước, quảng cáo hoặc banner chèn vào sau, và font khiến chữ đổi kích thước khi hoán đổi. Ba cách chữa tương ứng: luôn đặt width/height hoặc aspect-ratio, để sẵn chỗ trống cho nội dung chèn, và dùng size-adjust để font dự phòng khớp kích thước với font chính.
Trả lời thế này là mất điểm
- Còn nói về FID. Nó đã bị thay bằng INP từ tháng 3/2024, và INP khó hơn hẳn.
- Chỉ nhìn điểm Lighthouse. Nó là mô phỏng; xếp hạng dùng dữ liệu người dùng thật.