Bộ nhớ liên tục

Bộ nhớ liên tục có thể giúp bảo vệ dữ liệu quan trọng khỏi bị loại bỏ và giảm nguy cơ mất dữ liệu.

Khi gặp phải tình trạng thiếu bộ nhớ, chẳng hạn như ổ đĩa còn ít dung lượng, các trình duyệt thường sẽ loại bỏ dữ liệu, kể cả dữ liệu từ Cache API và IndexedDB, từ nguồn gốc được sử dụng gần đây nhất. Điều này có thể gây mất dữ liệu nếu ứng dụng chưa đồng bộ hoá dữ liệu với máy chủ và làm giảm độ tin cậy của ứng dụng bằng cách xoá các tài nguyên cần thiết để ứng dụng hoạt động. Cả hai điều này đều dẫn đến trải nghiệm tiêu cực cho người dùng.

Rất may là nghiên cứu của nhóm Chrome cho thấy Chrome rất hiếm khi tự động xoá dữ liệu. Người dùng thường xoá bộ nhớ theo cách thủ công. Do đó, nếu người dùng thường xuyên truy cập vào trang web của bạn, thì khả năng dữ liệu của bạn bị loại bỏ là rất thấp. Để ngăn trình duyệt xoá dữ liệu của bạn, bạn có thể yêu cầu đánh dấu toàn bộ bộ nhớ của trang web là bộ nhớ ổn định.

Bộ nhớ liên tục được hỗ trợ trong nhiều trình duyệt hiện đại.

Browser Support

  • Chrome: 55.
  • Edge: 79.
  • Firefox: 57.
  • Safari: 15.2.

Source

Để tìm hiểu thêm về việc loại bỏ, dung lượng bạn có thể lưu trữ và cách xử lý các hạn chế về hạn mức, hãy xem phần Bộ nhớ cho web.

Kiểm tra xem bộ nhớ của trang web có được đánh dấu là liên tục hay không

Bạn có thể dùng JavaScript để xác định xem bộ nhớ của trang web có được đánh dấu là bộ nhớ liên tục hay không. Việc gọi navigator.storage.persisted() sẽ trả về một Promise phân giải bằng một giá trị boolean, cho biết liệu bộ nhớ đã được đánh dấu là được duy trì hay chưa.

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

Khi nào tôi nên yêu cầu bộ nhớ liên tục?

Thời điểm thích hợp nhất để yêu cầu đánh dấu bộ nhớ của bạn là bộ nhớ liên tục là khi bạn lưu dữ liệu quan trọng của người dùng và yêu cầu này lý tưởng nhất là được bao bọc trong một cử chỉ của người dùng. Không yêu cầu bộ nhớ liên tục khi tải trang hoặc trong mã khởi động khác, trình duyệt có thể nhắc người dùng cấp quyền. Nếu người dùng không làm gì mà họ nghĩ là cần lưu, thì lời nhắc có thể gây nhầm lẫn và họ có thể sẽ từ chối yêu cầu. Ngoài ra, đừng nhắc quá thường xuyên. Nếu người dùng quyết định không cấp quyền, đừng nhắc lại ngay vào lần lưu tiếp theo.

Yêu cầu bộ nhớ liên tục

Để yêu cầu bộ nhớ liên tục cho dữ liệu của trang web, hãy gọi navigator.storage.persist(). Phương thức này trả về một Promise phân giải bằng một giá trị boolean, cho biết liệu quyền truy cập vào bộ nhớ liên tục đã được cấp hay chưa.

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

Làm cách nào để cấp quyền?

Bộ nhớ ổn định được coi là một quyền. Trình duyệt sử dụng nhiều yếu tố để quyết định có cấp quyền truy cập vào bộ nhớ liên tục hay không.

Chrome và các trình duyệt khác dựa trên Chromium

Chrome và hầu hết các trình duyệt khác dựa trên Chromium đều tự động xử lý yêu cầu cấp quyền và không hiển thị bất kỳ lời nhắc nào cho người dùng. Thay vào đó, nếu một trang web được coi là quan trọng, thì quyền lưu trữ liên tục sẽ tự động được cấp, nếu không thì quyền này sẽ bị từ chối một cách âm thầm.

Các phương pháp phỏng đoán để xác định xem một trang web có quan trọng hay không bao gồm:

  • Mức độ tương tác trên trang web cao đến mức nào?
  • Trang web đó đã được cài đặt hoặc đánh dấu trang chưa?
  • Trang web đó đã được cấp quyền hiển thị thông báo chưa?

Nếu yêu cầu bị từ chối, bạn có thể yêu cầu lại sau và yêu cầu đó sẽ được đánh giá bằng cách sử dụng các phương pháp phỏng đoán tương tự.

Firefox

Firefox uỷ quyền yêu cầu cấp quyền cho người dùng. Khi bộ nhớ liên tục được yêu cầu, hệ thống sẽ nhắc người dùng bằng một cửa sổ bật lên trên giao diện người dùng để hỏi xem họ có cho phép trang web lưu trữ dữ liệu trong bộ nhớ liên tục hay không.

Một cửa sổ bật lên do Firefox hiển thị khi một trang web yêu cầu bộ nhớ liên tục.
Cửa sổ bật lên do Firefox hiển thị khi một trang web yêu cầu bộ nhớ liên tục.

Bộ nhớ nào được bảo vệ bằng bộ nhớ ổn định?

Nếu được cấp quyền truy cập vào bộ nhớ liên tục, trình duyệt sẽ không loại bỏ dữ liệu được lưu trữ trong:

  • Cache API
  • Bánh quy
  • Bộ nhớ DOM (Bộ nhớ cục bộ)
  • API Hệ thống tệp (hệ thống tệp được cung cấp và cách ly trong hộp cát của trình duyệt)
  • IndexedDB
  • Trình chạy dịch vụ
  • Bộ nhớ đệm của ứng dụng (không dùng nữa, không sử dụng)
  • WebSQL (không dùng nữa, không sử dụng)

Cách tắt bộ nhớ ổn định

Hiện tại, không có cách nào theo chương trình để cho trình duyệt biết rằng bạn không cần bộ nhớ liên tục nữa.

Kết luận

Nghiên cứu của nhóm Chrome cho thấy rằng mặc dù có thể, nhưng Chrome hiếm khi tự động xoá dữ liệu đã lưu trữ. Để bảo vệ dữ liệu quan trọng có thể không được lưu trữ trên đám mây hoặc sẽ dẫn đến mất dữ liệu đáng kể, bộ nhớ liên tục có thể là một công cụ hữu ích để đảm bảo rằng trình duyệt không xoá dữ liệu của bạn khi thiết bị cục bộ gặp phải tình trạng thiếu bộ nhớ. Và hãy nhớ rằng bạn chỉ nên yêu cầu bộ nhớ liên tục khi người dùng có khả năng muốn sử dụng bộ nhớ này nhất.

Cảm ơn bạn!

Xin chân thành cảm ơn Victor Costan và Joe Medley đã xem xét tài liệu này. Cảm ơn Chris Wilson đã viết phiên bản gốc của tài liệu này. Phiên bản này lần đầu xuất hiện trên WebFundamentals.