Xuất bản: Ngày 20 tháng 7 năm 2018
Giới thiệu
Tìm nạp trước không trạng thái là một cơ chế mới trong Chrome, thay thế cho quy trình kết xuất trước không còn được dùng, được dùng để hỗ trợ các tính năng như <link rel="prerender">. Giống như kết xuất trước, tính năng này tìm nạp tài nguyên trước; nhưng không giống như kết xuất trước, tính năng này không thực thi JavaScript hoặc kết xuất trước bất kỳ phần nào của trang. Mục tiêu của NoState Prefetch là sử dụng ít bộ nhớ hơn so với việc kết xuất trước, trong khi vẫn giảm thời gian tải trang.
NoState Prefetch không phải là một API mà là một cơ chế được Chrome dùng để triển khai nhiều API và tính năng. Cả Resource Hints API và việc tìm nạp trước các trang của thanh địa chỉ Chrome đều được triển khai bằng tính năng Tìm nạp trước không trạng thái. Nếu bạn đang sử dụng Chrome 63 trở lên, thì trình duyệt của bạn đã sử dụng tính năng Tìm nạp trước không trạng thái cho các tính năng như <link rel="prerender">.
Bài viết này giải thích cách hoạt động của NoStatePrefetch, lý do ra mắt tính năng này và hướng dẫn sử dụng biểu đồ của Chrome để xem số liệu thống kê về việc sử dụng tính năng này.
Động lực
Có hai động lực chính để giới thiệu tính năng Tìm nạp trước không trạng thái:
Giảm mức sử dụng bộ nhớ
Tính năng Tìm nạp trước không trạng thái chỉ sử dụng khoảng 45 MiB bộ nhớ. Duy trì trình quét tải trước là chi phí bộ nhớ chính cho tính năng Tìm nạp trước không trạng thái và chi phí này vẫn tương đối ổn định trong các trường hợp sử dụng khác nhau. Việc tăng kích thước hoặc số lượng tìm nạp không ảnh hưởng đáng kể đến lượng bộ nhớ mà tính năng Tìm nạp trước không trạng thái tiêu thụ.
Ngược lại, quá trình kết xuất trước thường tiêu thụ 100 MiB bộ nhớ và mức tiêu thụ bộ nhớ tối đa là 150 MiB. Mức tiêu thụ bộ nhớ cao này khiến ứng dụng không phù hợp với các thiết bị cấp thấp (tức là có RAM <= 512 MB). Do đó, Chrome sẽ không kết xuất trước trên các thiết bị cấp thấp mà thay vào đó sẽ kết nối trước.
Tạo điều kiện hỗ trợ các tính năng mới của nền tảng web
Với tính năng kết xuất trước, không có hành động nào hướng đến người dùng (ví dụ: phát nhạc hoặc video) hoặc hành động có trạng thái (ví dụ: thay đổi phiên hoặc bộ nhớ cục bộ) sẽ xảy ra. Tuy nhiên, việc ngăn chặn những hành động này xảy ra trong khi kết xuất một trang có thể sẽ khó khăn và phức tạp. Tính năng Tìm nạp trước NoState chỉ tìm nạp trước các tài nguyên: tính năng này không thực thi mã hoặc kết xuất trang. Điều này giúp bạn dễ dàng ngăn chặn các hành động có trạng thái và hành động mà người dùng nhìn thấy.
Triển khai
Các bước sau đây giải thích cách hoạt động của tính năng Tìm nạp trước không trạng thái.
NoStatePrefetch được kích hoạt.
Gợi ý về tài nguyên kết xuất trước (tức là
<link rel="prerender">) và một số tính năng của Chrome sẽ kích hoạt tính năng Tìm nạp trước không trạng thái, miễn là đáp ứng 2 điều kiện sau: a) người dùng không sử dụng thiết bị cấp thấp và b) người dùng không sử dụng mạng di động.Một trình kết xuất chuyên dụng mới được tạo cho tính năng Tìm nạp trước không trạng thái.
Trong Chrome, "trình kết xuất" là một quy trình chịu trách nhiệm lấy một tài liệu HTML, phân tích cú pháp tài liệu đó, tạo cây kết xuất và vẽ kết quả lên màn hình. Mỗi thẻ trong Chrome, cũng như mỗi quy trình Tìm nạp trước không trạng thái, đều có trình kết xuất riêng để cung cấp khả năng cách ly. Điều này giúp giảm thiểu ảnh hưởng của sự cố (ví dụ: thẻ bị lỗi) cũng như ngăn mã độc truy cập vào các thẻ khác hoặc các phần khác của hệ thống.
Tài nguyên đang được tải bằng tính năng Tìm nạp trước không trạng thái sẽ được tìm nạp. Sau đó, HTMLPreloadScanner sẽ quét tài nguyên này để phát hiện mọi tài nguyên phụ cần được tìm nạp. Nếu tài nguyên chính hoặc bất kỳ tài nguyên phụ nào của tài nguyên đó có một trình chạy dịch vụ đã đăng ký, thì các yêu cầu này sẽ được chuyển qua trình chạy dịch vụ thích hợp.
Tính năng tìm nạp trước NoState chỉ hỗ trợ phương thức HTTP GET; tính năng này sẽ không tìm nạp bất kỳ tài nguyên phụ nào yêu cầu sử dụng các phương thức HTTP khác. Ngoài ra, công cụ này sẽ không tìm nạp bất kỳ tài nguyên nào yêu cầu hành động của người dùng (ví dụ: cửa sổ bật lên uỷ quyền, chứng chỉ máy khách SSL hoặc chế độ ghi đè thủ công).
Các tài nguyên phụ được tìm nạp sẽ được tìm nạp bằng Mức độ ưu tiên mạng "KHÔNG HOẠT ĐỘNG".
Mức ưu tiên mạng "KHÔNG HOẠT ĐỘNG" là mức ưu tiên mạng thấp nhất có thể trong Chrome.
Tất cả tài nguyên do NoState Prefetch truy xuất đều được lưu vào bộ nhớ đệm theo tiêu đề bộ nhớ đệm của tài nguyên.
Tính năng tìm nạp trước NoState sẽ lưu vào bộ nhớ đệm tất cả tài nguyên, ngoại trừ những tài nguyên có tiêu đề
no-storeCache-Control. Tài nguyên sẽ được xác thực lại trước khi sử dụng nếu có tiêu đề phản hồiVary, tiêu đềno-cacheCache-Control hoặc nếu tài nguyên đã được lưu trữ hơn 5 phút.Trình kết xuất sẽ bị huỷ sau khi tất cả các tài nguyên phụ được tải.
Nếu tài nguyên phụ hết thời gian chờ, trình kết xuất sẽ bị tắt sau 30 giây.
Trình duyệt không sửa đổi bất kỳ trạng thái nào ngoài việc cập nhật kho cookie và bộ nhớ đệm DNS cục bộ. Điều quan trọng là phải gọi ra điều này vì đây là "NoState" trong "NoState Prefetch".
Tại thời điểm này trong quy trình tải trang "bình thường", trình duyệt có thể sẽ thực hiện những việc làm thay đổi trạng thái trình duyệt: ví dụ: thực thi JavaScript, biến đổi
sessionStoragehoặclocalStorage, phát nhạc hoặc video, sử dụng History API hoặc nhắc người dùng. Các sửa đổi trạng thái duy nhất xảy ra trong tính năng Tìm nạp trước không trạng thái là việc cập nhật bộ nhớ đệm DNS khi phản hồi đến và việc cập nhật kho cookie nếu phản hồi chứa tiêu đềSet-Cookie.Khi cần, tài nguyên sẽ được tải vào cửa sổ trình duyệt.
Tuy nhiên, không giống như trang được kết xuất trước, trang sẽ không xuất hiện ngay lập tức mà vẫn cần được trình duyệt kết xuất. Trình duyệt sẽ không sử dụng lại trình kết xuất mà trình duyệt đã dùng cho tính năng Tìm nạp trước không trạng thái mà thay vào đó sẽ dùng một trình kết xuất mới. Việc không hiển thị trước trang sẽ làm giảm mức tiêu thụ bộ nhớ của NoStatePrefetch, nhưng cũng làm giảm tác động có thể có của tính năng này đối với thời gian tải trang.
Nếu trang có một trình chạy dịch vụ, thì quá trình tải trang này sẽ diễn ra thông qua trình chạy dịch vụ một lần nữa.
Nếu NoState Prefetch chưa hoàn tất việc tìm nạp tài nguyên phụ vào thời điểm cần trang, trình duyệt sẽ tiếp tục quy trình tải trang từ nơi NoState Prefetch dừng lại. Trình duyệt vẫn cần tìm nạp tài nguyên, nhưng không nhiều như khi NoState Prefetch chưa được khởi tạo.
Tác động đến hoạt động phân tích web
Các trang được tải bằng tính năng Tìm nạp trước NoState được các công cụ phân tích trang web đăng ký vào những thời điểm hơi khác nhau, tuỳ thuộc vào việc công cụ đó thu thập dữ liệu ở phía máy khách hay phía máy chủ.
Tập lệnh phân tích phía máy khách sẽ đăng ký một lượt xem trang khi trang được hiển thị cho người dùng. Các tập lệnh này dựa vào việc thực thi JavaScript và tính năng Tìm nạp trước không trạng thái không thực thi bất kỳ JavaScript nào.
Các công cụ phân tích phía máy chủ sẽ đăng ký các chỉ số khi một yêu cầu được xử lý. Đối với các tài nguyên được tải thông qua tính năng Tìm nạp trước không trạng thái, có thể có một khoảng thời gian đáng kể giữa thời điểm yêu cầu được xử lý và thời điểm phản hồi thực sự được ứng dụng sử dụng (nếu ứng dụng sử dụng). Kể từ Chrome 69, NoState Prefetch sẽ thêm tiêu đề Purpose: Prefetch vào tất cả các yêu cầu để phân biệt chúng với hoạt động duyệt web thông thường.
Xem ngay
NoStatePrefetch được phát hành vào tháng 12 năm 2017 trong Chrome 63. Hiện tại, thông tin này được dùng để:
- Triển khai gợi ý về tài nguyên 
prerender - Tìm nạp kết quả đầu tiên trong kết quả tìm kiếm trên Google
 - Tìm nạp các trang mà thanh địa chỉ của Chrome dự đoán là có khả năng được truy cập tiếp theo
 
Bạn có thể sử dụng Chrome Internals để xem cách bạn đã sử dụng NoStatePrefetch.
Để xem danh sách các trang web đã được tải bằng tính năng Tìm nạp trước không trạng thái, hãy truy cập vào chrome://net-internals/#prerender.
Để xem số liệu thống kê về mức sử dụng tính năng Tìm nạp trước không trạng thái, hãy chuyển đến chrome://histograms rồi tìm "NoStatePrefetch". Có 3 biểu đồ Tìm nạp trước không trạng thái riêng biệt – một biểu đồ cho mỗi trường hợp sử dụng tính năng Tìm nạp trước không trạng thái:
- "NoStatePrefetch" (số liệu thống kê về mức sử dụng theo gợi ý tài nguyên kết xuất trước)
 - "gws_NoStatePrefetch" (số liệu thống kê về mức sử dụng của trang kết quả tìm kiếm trên Google)
 - "omnibox_NoStatePrefetch" (số liệu thống kê về mức sử dụng theo thanh địa chỉ của Chrome)