INP là gì? Hướng dẫn A-Z tối ưu Interaction to Next Paint
Bạn đã bao giờ click vào một nút trên website và phải chờ đợi trong vô vọng, tự hỏi liệu trang web có bị “đơ” hay không? Cảm giác khó chịu đó chính là vấn đề mà Interaction to Next Paint (INP) là gì ra đời để giải quyết. Đây không chỉ là một chỉ số kỹ thuật khô khan. Nó là thước đo sự kiên nhẫn của người dùng. Từ tháng 3/2024, INP đã chính thức thay thế FID để trở thành một phần của Core Web Vitals. Hãy cùng Việt Thắng tìm hiểu cách làm chủ chỉ số quan trọng này nhé.
Interaction to Next Paint (INP) là gì?
Hãy tưởng tượng bạn đang nói chuyện với một người bạn. Khi bạn đặt câu hỏi, bạn mong đợi một phản hồi nhanh chóng. Nếu họ im lặng quá lâu, cuộc trò chuyện sẽ trở nên gượng gạo. Website cũng vậy. INP chính là thước đo tốc độ “trả lời” của website đối với mỗi hành động của bạn.
Định nghĩa: INP là chỉ số đo lường khả năng phản hồi của trang
Interaction to Next Paint (INP) là một chỉ số của Core Web Vitals, đo lường độ trễ từ khi người dùng tương tác với trang (như click chuột, chạm vào màn hình, hoặc gõ phím) cho đến khi họ nhìn thấy phản hồi hình ảnh tiếp theo trên màn hình. Nói một cách đơn giản, nó đo lường trang web của bạn có “nhạy” hay không trong suốt quá trình người dùng sử dụng, chứ không chỉ ở lần tương tác đầu tiên.
Cập nhật quan trọng: INP chính thức thay thế FID từ tháng 3/2024
Đây là một thay đổi lớn. Trước đây, Google dùng First Input Delay (FID) để đo lường khả năng phản hồi. Tuy nhiên, FID chỉ đo độ trễ của tương tác **đầu tiên**. Điều này giống như đánh giá cả một bộ phim chỉ qua vài giây mở đầu. Google nhận ra rằng trải nghiệm người dùng là cả một hành trình, vì vậy INP ra đời để cung cấp một cái nhìn toàn diện hơn, chính thức trở thành một chỉ số cốt lõi ảnh hưởng trực tiếp đến xếp hạng SEO của bạn.

Sự khác biệt cốt lõi giữa INP và FID
Việc chuyển từ FID sang INP không chỉ là thay đổi tên gọi. Nó đánh dấu một sự thay đổi trong cách chúng ta hiểu về trải nghiệm người dùng. Đây là một bước tiến từ việc đo lường “ấn tượng đầu tiên” sang đánh giá “toàn bộ cuộc trò chuyện”.
FID chỉ đo lường độ trễ của tương tác đầu tiên
FID (First Input Delay) chỉ quan tâm đến độ trễ của lần đầu tiên người dùng cố gắng tương tác với trang của bạn. Nó trả lời câu hỏi: “Khi khách ghé thăm nhà bạn lần đầu và bấm chuông, bạn có ra mở cửa ngay không?”. Vấn đề là, một website có thể có FID rất tốt (mở cửa nhanh) nhưng sau đó lại trở nên cực kỳ chậm chạp khi người dùng bắt đầu đi sâu vào các tính năng khác.
INP đo lường toàn bộ vòng đời của tất cả tương tác
Ngược lại, chỉ số INP giống như một người quản gia tận tụy, quan sát mọi tương tác của khách trong suốt thời gian họ ở lại. Nó đo lường độ trễ của hầu hết các tương tác: từ việc nhấp vào nút “Thêm vào giỏ hàng”, mở menu điều hướng, cho đến việc điền vào biểu mẫu. Sau đó, nó sẽ chọn ra một trong những tương tác chậm nhất để đại diện cho trải nghiệm tổng thể của người dùng trên trang đó.
Tại sao INP là thước đo trải nghiệm người dùng chính xác hơn?
Bởi vì người dùng không rời đi ngay sau cú nhấp chuột đầu tiên. Họ ở lại, họ khám phá, họ tương tác. Một trang web có thể tải nhanh ban đầu nhưng lại “ì ạch” khi xử lý các tác vụ phức tạp sau đó sẽ tạo ra trải nghiệm tồi tệ. INP nắm bắt được sự thất vọng này. Bằng cách đo lường toàn bộ hành trình, INP phản ánh chính xác hơn cảm giác thực tế khi sử dụng một trang web, giúp chúng ta xác định và sửa chữa những điểm nghẽn gây khó chịu cho người dùng.

Cách thức hoạt động của chỉ số INP
Để hiểu cách cải thiện INP, trước tiên bạn cần biết nó được tính toán như thế nào. Một tương tác không chỉ xảy ra tức thời. Nó bao gồm một chuỗi ba giai đoạn. Tổng thời gian của cả ba giai đoạn này chính là giá trị INP.
Giai đoạn 1: Input Delay (Độ trễ đầu vào)
Đây là khoảng thời gian chờ đợi từ khi bạn nhấp chuột cho đến khi trình duyệt thực sự bắt đầu xử lý hành động đó. Nguyên nhân chính của độ trễ này là do luồng chính (main thread) của trình duyệt đang bận rộn với các tác vụ khác, chẳng hạn như thực thi một đoạn mã JavaScript lớn. Hãy hình dung bạn gọi tên một nhân viên, nhưng họ đang mải nghe điện thoại và chưa thể trả lời bạn ngay. Đó chính là Input Delay.
Giai đoạn 2: Processing Time (Thời gian xử lý)
Khi trình duyệt đã sẵn sàng, nó bắt đầu xử lý mã logic liên quan đến tương tác của bạn. Ví dụ, khi bạn thêm một sản phẩm vào giỏ hàng, trình duyệt cần chạy mã để cập nhật số lượng sản phẩm, tính lại tổng tiền, và chuẩn bị dữ liệu để hiển thị. Thời gian cần thiết để hoàn thành công việc “tính toán” này được gọi là Processing Time.
Giai đoạn 3: Presentation Delay (Độ trễ trình bày)
Sau khi xử lý xong, trình duyệt cần phải “vẽ” lại màn hình để hiển thị kết quả cho bạn thấy. Quá trình tính toán cách các phần tử mới sẽ trông như thế nào và hiển thị chúng lên màn hình chính là Presentation Delay. Nếu trang của bạn có cấu trúc DOM quá phức tạp, giai đoạn này có thể mất nhiều thời gian hơn.

Thế nào là một điểm INP tốt?
Google đã đưa ra các ngưỡng rất rõ ràng để bạn biết mình đang đứng ở đâu và cần phải làm gì. Việc theo dõi các ngưỡng này là rất quan trọng để đảm bảo trang web của bạn không bị phạt vì trải nghiệm người dùng kém.
Ngưỡng điểm INP theo tiêu chuẩn của Google
Dựa trên dữ liệu thu thập từ người dùng thực tế, Google phân loại điểm INP tốt, cần cải thiện và kém như sau:
- Tốt: Dưới 200ms
Nếu INP của bạn dưới 200 mili giây, xin chúc mừng! Trang web của bạn có khả năng phản hồi rất nhanh và mang lại trải nghiệm mượt mà cho người dùng.
- Cần cải thiện: Từ 200ms đến 500ms
Đây là vùng “báo động vàng”. Người dùng có thể bắt đầu cảm nhận được độ trễ. Bạn nên bắt đầu tìm hiểu nguyên nhân và lên kế hoạch tối ưu hóa INP.
- Kém: Trên 500ms
Với INP trên 500 mili giây (nửa giây), trang web của bạn được coi là có khả năng phản hồi kém. Điều này ảnh hưởng tiêu cực đến trải nghiệm người dùng và có thể làm giảm thứ hạng SEO của bạn.

Các nguyên nhân phổ biến gây ra điểm INP kém
Khi điểm INP của bạn không tốt, thường là do luồng chính của trình duyệt bị quá tải. Giống như một đầu bếp duy nhất phải xử lý hàng chục đơn hàng cùng lúc, luồng chính cũng có thể bị “tắc nghẽn”. Dưới đây là những “thủ phạm” hàng đầu gây ra tình trạng này.
JavaScript thực thi quá lâu chặn luồng chính (Long Tasks)
Đây là nguyên nhân INP kém phổ biến nhất. Một “Long Task” là bất kỳ đoạn mã nào chiếm dụng luồng chính hơn 50 mili giây. Khi một Long Task đang chạy, trình duyệt không thể làm bất cứ điều gì khác. Nó không thể phản hồi lại cú nhấp chuột của người dùng. Kết quả là tạo ra độ trễ lớn.
Cấu trúc DOM quá lớn và phức tạp
DOM (Document Object Model) là cấu trúc cây của trang web. Khi DOM quá lớn và sâu, việc tính toán lại bố cục và “vẽ” lại các thay đổi sau một tương tác trở nên rất tốn kém. Mỗi thay đổi nhỏ cũng có thể buộc trình duyệt phải làm việc vất vả, dẫn đến Presentation Delay kéo dài.
Script của bên thứ ba không được tối ưu
Các script từ bên thứ ba như mã theo dõi phân tích, quảng cáo, hoặc các widget mạng xã hội có thể là “kẻ giấu mặt” phá hoại điểm INP của bạn. Chúng thường chạy các tác vụ nặng trên luồng chính mà bạn không thể kiểm soát trực tiếp, gây ra tình trạng chậm chạp không mong muốn.
Trình xử lý sự kiện (Event Handlers) cồng kềnh
Trình xử lý sự kiện là các đoạn mã được thực thi khi người dùng làm gì đó (ví dụ: `onclick`, `onkeydown`). Nếu mã bên trong các trình xử lý này quá phức tạp và thực hiện nhiều công việc không cần thiết ngay lập tức, nó sẽ làm tăng đáng kể Processing Time và gây ra INP cao.

Hướng dẫn đo lường và chẩn đoán vấn đề INP
Bạn không thể sửa một thứ mà bạn không thể đo. May mắn là chúng ta có rất nhiều công cụ mạnh mẽ để kiểm tra và chẩn đoán các vấn đề về INP. Mỗi công cụ có một vai trò riêng trong quá trình tối ưu hóa của bạn.
Sử dụng dữ liệu thực tế (Field Data) trong Google Search Console
Đây là nguồn dữ liệu quan trọng nhất. Báo cáo Core Web Vitals trong Google Search Console cho bạn biết chỉ số INP thực tế mà người dùng đang trải nghiệm trên trang web của bạn. Nó cho bạn biết “cái gì” đang sai. Dữ liệu này được thu thập từ những người dùng Chrome thực tế, phản ánh chính xác nhất hiệu suất của trang.
Phân tích tại chỗ (Lab Data) với PageSpeed Insights & Lighthouse
Các công cụ kiểm tra INP như PageSpeed Insights và Lighthouse cung cấp dữ liệu phòng thí nghiệm (Lab Data). Chúng mô phỏng một lượt tải trang và đưa ra các chẩn đoán về hiệu suất. Dữ liệu này giúp bạn xác định “tại sao” INP lại kém. Chúng sẽ chỉ ra các Long Tasks cụ thể và đưa ra các gợi ý cải thiện ban đầu.
Gỡ lỗi chuyên sâu bằng Chrome DevTools
Khi bạn cần đi sâu hơn để tìm ra gốc rễ của vấn đề, Chrome DevTools là người bạn đồng hành không thể thiếu. Bảng điều khiển Performance (Hiệu suất) cho phép bạn ghi lại một phiên tương tác, xem chi tiết từng tác vụ trên luồng chính, xác định chính xác đoạn mã nào đang gây ra Long Tasks, và phân tích từng giai đoạn của INP. Đây là công cụ dành cho việc “phẫu thuật” và sửa lỗi chi tiết.

Làm cách nào để cải thiện điểm INP? (Kèm ví dụ)
Sau khi đã xác định được vấn đề, giờ là lúc chúng ta bắt tay vào việc cải thiện INP. Dưới đây là các kỹ thuật hiệu quả nhất mà bạn có thể áp dụng ngay lập tức, kèm theo các ví dụ mã nguồn để bạn dễ hình dung.
Kỹ thuật 1: Chia nhỏ các tác vụ dài (Break up Long Tasks)
Thay vì bắt trình duyệt chạy một tác vụ lớn và dài hơi, hãy chia nó thành nhiều phần nhỏ hơn. Bằng cách trả lại quyền kiểm soát cho luồng chính giữa các tác vụ nhỏ, bạn cho phép trình duyệt xử lý các tương tác của người dùng. Kỹ thuật phổ biến là sử dụng `setTimeout`.
Ví dụ: Thay vì xử lý một mảng lớn cùng lúc…
function processArray(items) { for (let i = 0; i < items.length; i++) { // Thực hiện một tác vụ nặng process(items[i]); }}
…hãy chia nhỏ nó ra:
function processArrayAsync(items) { let i = 0; function doChunk() { const start = Date.now(); // Chỉ xử lý trong một khoảng thời gian ngắn (ví dụ < 50ms) while (i < items.length && (Date.now() - start) < 50) { process(items[i]); i++; } // Nếu còn việc, lên lịch cho lần chạy tiếp theo if (i < items.length) { setTimeout(doChunk, 0); } } doChunk();}
Kỹ thuật 2: Tối ưu hóa trình xử lý sự kiện (Optimize Event Callbacks)
Chỉ thực hiện những công việc tối cần thiết bên trong trình xử lý sự kiện. Mọi thứ khác có thể trì hoãn nên được thực hiện sau. Mục tiêu là làm cho phản hồi hình ảnh xuất hiện nhanh nhất có thể.
Ví dụ: Thay vì làm mọi thứ trong event listener…
button.addEventListener('click', (event) => { // 1. Cập nhật giao diện ngay lập tức (quan trọng) event.target.classList.add('pending'); // 2. Thực hiện tác vụ nặng (nên trì hoãn) const result = veryLongCalculation(); // 3. Gửi dữ liệu đi (nên trì hoãn) fetch('/api/submit', { method: 'POST', body: result });});
…hãy trì hoãn các tác vụ không cần thiết:
button.addEventListener('click', (event) => { // 1. Cập nhật giao diện ngay lập tức event.target.classList.add('pending'); // 2. Trì hoãn các tác vụ còn lại setTimeout(() => { const result = veryLongCalculation(); fetch('/api/submit', { method: 'POST', body: result }); }, 0);});
Kỹ thuật 3: Giảm độ phức tạp của DOM
Một DOM gọn gàng sẽ giúp trình duyệt “vẽ” lại màn hình nhanh hơn. Hãy thường xuyên kiểm tra và loại bỏ các thẻ HTML không cần thiết, tránh lồng các phần tử quá sâu, và sử dụng các kỹ thuật CSS hiện đại như `content-visibility` để trình duyệt chỉ render những gì người dùng đang nhìn thấy.
Kỹ thuật 4: Sử dụng API `requestIdleCallback` để trì hoãn tác vụ
Đây là một API mạnh mẽ cho phép bạn lên lịch cho các tác vụ không quan trọng để chúng chỉ chạy khi trình duyệt rảnh rỗi. Điều này rất lý tưởng cho các công việc nền như gửi dữ liệu phân tích hoặc khởi tạo các thư viện không cần thiết ngay lập tức.
requestIdleCallback(() => { // Chạy các tác vụ có độ ưu tiên thấp ở đây sendAnalyticsData();});
Kỹ thuật 5: Kiểm soát và tối ưu hóa mã của bên thứ ba
Hãy kiểm tra tác động của từng script bên thứ ba đến hiệu suất. Sử dụng thuộc tính `async` hoặc `defer` cho các thẻ `script` để chúng không chặn việc render trang. Cân nhắc việc tải các script này một cách có điều kiện hoặc chỉ tải khi người dùng tương tác với các tính năng liên quan.

Lời kết
Việc tối ưu hóa INP không chỉ là chạy theo một chỉ số mới của Google. Nó là hành động thể hiện sự tôn trọng đối với thời gian và sự kiên nhẫn của người dùng. Một trang web phản hồi nhanh chóng, mượt mà sẽ giữ chân khách truy cập, khuyến khích họ tương tác nhiều hơn và cuối cùng là tăng tỷ lệ chuyển đổi. Đồng thời, vì INP là một phần của Core Web Vitals, việc cải thiện nó cũng trực tiếp góp phần nâng cao thứ hạng của bạn trên kết quả tìm kiếm.
Đừng xem INP là một rào cản kỹ thuật. Hãy xem nó là một cơ hội để làm cho website của bạn trở nên tốt hơn, thân thiện hơn. Bạn thấy phần nào trong quá trình tối ưu hóa INP là khó thực hiện nhất? Chia sẻ với Việt Thắng ở phần bình luận nhé!
Nếu việc phân tích và cải thiện các chỉ số kỹ thuật này làm bạn mất quá nhiều thời gian, Việt Thắng luôn sẵn sàng hỗ trợ bạn xây dựng một website chuyên nghiệp, chuẩn SEO và có trải nghiệm người dùng tuyệt vời. Nhắn tin cho chúng tôi ngay nhé!