Skip to main content
Bạn đang xem tài liệu Inertia.js v2. Inertia.js v3 đã được phát hành và hiện là phiên bản mặc định. Hãy xem hướng dẫn nâng cấp để bắt đầu.
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 một trang, bạn có thể thêm prop prefetch vào component link của Inertia. Mặc định, Inertia sẽ prefetch dữ liệu khi người dùng hover lên link lâu hơn 75ms. Bạn có thể tùy chỉnh độ trễ hover này bằng tùy chọn prefetch.hoverDelay trong cấu hình mặc định của ứng dụng.
Mặc định, dữ liệu được cache trong 30 giây trước khi bị loại bỏ. Bạn có thể tùy chỉnh giá trị mặc định này bằng tùy chọn prefetch.cacheFor trong cấu hình mặc định của ứng dụng. Bạn cũng có thể tùy chỉnh thời lượng cache cho từng link bằng cách truyền prop cacheFor vào 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, bạn có thể xóa dữ liệu cache theo tag bằng router.flushByCacheTags. Thao tác này xóa mọi response cache chứa bất kỳ tag nào trong số các 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 sẽ tải một bản dữ liệu mới khi người dùng truy cập trang nếu dữ liệu cache đã cũ hơn thời lượng cache. Bạn có thể tùy chỉnh hành vi này bằng cách truyền một 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à trang cùng dữ liệu sẽ được tải từ server như một request thông 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 v2 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.