Bộ nhớ liên tục

Việc sử dụng bộ nhớ liên tục có thể giúp bảo vệ các 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 áp lực lưu trữ như dung lượng ổ đĩa thấp, các trình duyệt thường sẽ xoá dữ liệu, kể cả dữ liệu khỏi Cache API và IndexedDB, khỏi nguồn gốc ít được sử dụng 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ủ, đồng thời 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 yếu tố này đều dẫn đến trải nghiệm người dùng tiêu cực.

Rất may, nghiên cứu của nhóm Chrome cho thấy rằng 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 trang web của bạn, thì dữ liệu của bạn có rất ít khả năng sẽ bị loại. Để ngăn trình duyệt xoá dữ liệu, bạn có thể yêu cầu đánh dấu toàn bộ bộ nhớ của trang web là ổn định.

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

Hỗ trợ trình duyệt

  • 55
  • 79
  • 57
  • 15,2

Nguồn

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

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

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

// 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ớ ổn định?

Thời điểm tốt nhất để yêu cầu đánh dấu bộ nhớ của bạn là cố định là khi bạn lưu các dữ liệu quan trọng của người dùng, và tốt nhất là yêu cầu đó nên được gói trong một cử chỉ của người dùng. Đừng yêu cầu bộ nhớ liên tục khi tải trang hoặc trong mã tự 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 hiện không làm gì mà họ cho rằng 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 trong lần lưu tiếp theo.

Yêu cầu dung lượng lưu trữ liên tục

Để yêu cầu bộ nhớ ổn định cho dữ liệu trang web của bạn, hãy gọi navigator.storage.persist(). Phương thức này trả về một Promise giúp phân giải bằng một boolean, cho biết liệu quyền truy cập bộ nhớ ổn định đã đượ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}`);
}

Quyền được cấp như thế nào?

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

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

Chrome và hầu hết các trình duyệt dựa trên Chromium khác 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ữ lâu dài sẽ tự động được cấp, nếu không thì quyền đó sẽ bị từ chối ngầm.

Sau đây là phương pháp phỏng đoán để xác định xem một trang web có quan trọng hay không:

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

Nếu bị từ chối, thì 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 thông tin 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 yêu cầu bộ nhớ liên tục, hệ thống sẽ nhắc người dùng thông qua 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 sẽ xuất hiện trên Firefox khi một trang web yêu cầu lưu trữ liên tục.
Một cửa sổ bật lên sẽ xuất hiện trên Firefox 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ớ liên tục?

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

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

Cách tắt tính năng bộ nhớ liên tục

Tại thời điểm này, không có cách lập trình nào để 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 mặc dù có thể, nhưng Chrome hiếm khi tự động xoá dữ liệu đã lưu. Để bảo vệ những dữ liệu quan trọng có thể không được lưu trữ trên đám mây hoặc dẫn đến mất dữ liệu đáng kể, bộ nhớ liên tục có thể là công cụ hữu ích giúp đảm bảo 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 áp lực lưu trữ. Xin lưu ý rằng chỉ yêu cầu bộ nhớ liên tục khi người dùng rất có thể muốn dùng.

Cảm ơn bạn!

Đặc biệt cảm ơn Victor Costan và Joe Medley đã xem xét bài viết này. Cảm ơn Chris Wilson đã viết phiên bản gốc của bài viết này, xuất hiện lần đầu trên Web Basicss.

Hình ảnh chính của Umberto trên Unsplash