Skip to main content
Inertia hỗ trợ prefetch dữ liệu cho những trang có khả năng được truy cập tiếp theo. Điều này giúp cải thiện hiệu năng cảm nhận của ứng dụng bằng cách cho phép dữ liệu được tải ở nền trong khi người dùng vẫn đang tương tác với trang hiện tại. Để prefetch dữ liệu cho page, thêm prop prefetch vào Inertia link component. Mặc định Inertia prefetch dữ liệu khi user hover lên link hơn 75ms. Bạn có thể tùy chỉnh hover delay bằng tùy chọn prefetch.hoverDelay trong application defaults.
Mặc định, dữ liệu được cache 30 giây trước khi bị evict. Bạn có thể tùy chỉnh bằng tùy chọn prefetch.cacheFor trong application defaults, hoặc theo từng link bằng prop cacheFor của component Link.
Thay vì prefetch khi hover, bạn cũng có thể bắt đầu prefetch tại sự kiện mousedown bằng cách truyền giá trị click vào prop prefetch.
Nếu chắc chắn người dùng sẽ truy cập một trang tiếp theo, bạn cũng có thể prefetch dữ liệu ngay khi component được mount.
Bạn cũng có thể kết hợp nhiều chiến lược prefetch bằng cách truyền một mảng giá trị vào prop prefetch.

Prefetch bằng lập trình

Bạn có thể prefetch dữ liệu bằng lập trình với router.prefetch. Chữ ký của phương thức này giống router.visit, ngoại trừ đối số thứ ba cho phép bạn chỉ định các tùy chọn prefetch. Khi không chỉ định tùy chọn cacheFor, giá trị mặc định là 30 giây.
Inertia cũng cung cấp hook usePrefetch để theo dõi trạng thái prefetch của trang hiện tại. Hook trả về thông tin cho biết trang có đang prefetch hay không, đã được prefetch chưa, lần cập nhật gần nhất là khi nào, cùng phương thức flush để chỉ xóa cache của trang hiện tại.
Bạn cũng có thể truyền các tùy chọn visit khi cần phân biệt nhiều cấu hình request khác nhau cho cùng một URL.

Cache tags

Cache tag cho phép bạn nhóm dữ liệu prefetch có liên quan và vô hiệu hóa toàn bộ dữ liệu cache mang tag đó khi một sự kiện cụ thể xảy ra. Để gắn tag cho dữ liệu cache, hãy truyền prop cacheTags vào component Link.
Khi prefetch bằng lập trình, hãy truyền cacheTags trong đối số thứ ba của router.prefetch.

Vô hiệu hóa cache

Bạn có thể xóa thủ công prefetch cache bằng cách gọi router.flushAll để xóa toàn bộ dữ liệu cache, hoặc router.flush để xóa cache của một trang cụ thể.
Để kiểm soát chi tiết hơn, có thể flush cache theo tag bằng router.flushByCacheTags. Thao tác này xóa mọi cached response chứa bất kỳ tag được chỉ định.

Tự động xóa cache

Mặc định, Inertia không tự động xóa prefetch cache khi bạn điều hướng sang trang mới. Dữ liệu cache chỉ bị loại bỏ khi hết hạn theo thời lượng cache. Nếu muốn xóa toàn bộ dữ liệu cache trong mỗi lần điều hướng, bạn có thể thiết lập một event listener.

Vô hiệu hóa khi gửi request

Để tự động vô hiệu hóa cache khi gửi request, hãy truyền prop invalidateCacheTags vào component Form. Các tag được chỉ định sẽ bị xóa khi form được gửi thành công.
Khi dùng helper useForm, bạn có thể đưa invalidateCacheTags vào các tùy chọn visit.
Bạn cũng có thể vô hiệu hóa cache tag bằng các visit lập trình thông qua tùy chọn invalidateCacheTags.

Stale-while-revalidate

Mặc định, Inertia fetch bản dữ liệu mới khi user truy cập page nếu cache cũ hơn thời lượng cache. Bạn có thể tùy chỉnh bằng cách truyền tuple vào prop cacheFor. Giá trị đầu tiên trong mảng là số giây cache được xem là còn mới, còn giá trị thứ hai xác định khoảng thời gian dữ liệu cũ vẫn có thể được phục vụ trước khi bắt buộc phải lấy dữ liệu mới từ server.
Nếu request được thực hiện trong khoảng dữ liệu còn mới (trước giá trị thứ nhất), cache được trả về ngay mà không gửi request đến server. Nếu request được thực hiện trong khoảng stale (giữa hai giá trị), giá trị cũ được trả cho người dùng đồng thời một request chạy nền sẽ làm mới dữ liệu cache. Khi dữ liệu mới được trả về, nó được gộp vào trang để người dùng có dữ liệu cập nhật nhất. Nếu request được thực hiện sau giá trị thứ hai, cache được xem là hết hạn và page cùng dữ liệu được fetch từ server như request bình thường.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v3 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.