Bộ nhớ liên tục

Việc sử dụng bộ nhớ liên tục có thể giúp dữ liệu quan trọng không 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, trình duyệt thường sẽ xoá dữ liệu, bao gồm cả dữ liệu từ Cache API và IndexedDB, khỏi nguồn ít được sử dụng nhất trong thời gian gần đây. Việc 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à 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 người dùng tiêu cực.

Rất may là nghiên cứu của nhóm Chrome cho thấy hiếm khi Chrome 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 bị loại bỏ là rất nhỏ. Để 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à ổ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 giải phóng bộ nhớ, dung lượng bạn có thể lưu trữ và cách xử lý các giới hạn đối với hạn mức, hãy xem bài viết Bộ nhớ cho web.

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

Bạn có thể sử dụng JavaScript để xác định xem bộ nhớ của trang web đã được đánh dấu là ổn định hay chưa. Việc gọi navigator.storage.persisted() sẽ trả về một Promise (Lời hứa) sẽ phân giải bằng boolean, cho biết liệu bộ nhớ đã được đánh dấu là ổn định 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 sử dụng bộ nhớ liên tục?

Thời điểm tốt nhất để yêu cầu bộ nhớ được đánh dấu là ổn định là khi bạn lưu 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ã 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ọ cho rằng cần lưu lại, lời nhắc có thể gây khó hiểu và có khả năng họ 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 trang web, hãy gọi navigator.storage.persist(). Hàm này trả về một Promise phân giải bằng một 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}`);
}

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 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 dựa trên Chromium khác sẽ tự động xử lý yêu cầu cấp quyền và không đưa ra 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 truy cập vào bộ nhớ cố định sẽ tự động được cấp, nếu không thì trang web sẽ tự động bị từ chối.

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

  • Mức độ tương tác với trang web cao đến mức nào?
  • Trang web đã được cài đặt hoặc đánh dấu trang 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, bạn có thể yêu cầu lại sau và hệ thống sẽ sử dụng phương pháp phỏng đoán tương tự để đánh giá yêu cầu đó.

Firefox

Firefox uỷ quyền yêu cầu quyền cho người dùng. Khi yêu cầu sử dụng bộ nhớ liên tục, 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.

Cửa sổ bật lên được 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 của 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ớ liên tục?

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

  • API Bộ nhớ đệm
  • Bánh quy
  • Bộ nhớ DOM (Bộ nhớ cục bộ)
  • File System API (API hệ thống tệp do trình duyệt cung cấp và hệ thống tệp dạng hộp cá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 nên sử dụng)
  • WebSQL (không dùng nữa, không nên sử dụng)

Cách tắt 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 để thông báo cho trình duyệt rằng bạn không còn cần bộ nhớ liên tục.

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 hiếm khi Chrome tự động xoá dữ liệu đã lưu trữ. Để 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 gây mất dữ liệu đáng kể, bộ nhớ bền vững có thể là một công cụ hữu ích giúp trình duyệt không xoá dữ liệu của bạn khi thiết bị cục bộ gặp áp lực khi lưu trữ. Hãy nhớ chỉ yêu cầu bộ nhớ liên tục khi người dùng có nhiều khả năng muốn sử dụng bộ nhớ đó nhất.

Cảm ơn bạn!

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

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