Không phải tất cả bộ nhớ đều được tạo như nhau: giới thiệu Bộ chứa bộ nhớ

Tiêu chuẩn bộ nhớ xác định một API để lưu trữ liên tục và ước tính hạn mức, cũng như cấu trúc bộ nhớ nền tảng. Chúng tôi sắp ra mắt một API để dễ dự đoán hơn việc giải phóng bộ nhớ liên tục dưới áp lực bộ nhớ lớn. Phiên bản này được cung cấp kể từ Chromium 122.

Tiêu chuẩn bộ nhớ giải quyết được vấn đề gì?

Thông thường, khi người dùng hết không gian lưu trữ trên thiết bị, dữ liệu được lưu trữ bằng các API như IndexedDB hoặc localStorage sẽ bị mất và người dùng không thể can thiệp. Một cách để đảm bảo tính bền vững cho bộ nhớ là gọi phương thức persist() của giao diện StorageManager. Phương thức này đồng thời yêu cầu người dùng cuối cấp quyền và thay đổi để bộ nhớ trở nên ổn định sau khi được cấp:

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

Phương thức yêu cầu duy trì bộ nhớ này là hoàn toàn hoặc không có gì. Không có cách nào để thể hiện nhu cầu duy trì chi tiết hơn. Tất cả chỉ là một bộ chứa lưu trữ.

Storage Buckets API (API Bộ chứa lưu trữ)

Ý tưởng chính của API Bộ chứa lưu trữ là cấp cho các trang web khả năng tạo nhiều bộ chứa lưu trữ. Trong đó, trình duyệt có thể chọn xoá từng bộ chứa một cách độc lập với các bộ chứa khác. Điều này cho phép nhà phát triển chỉ định mức độ ưu tiên giải phóng để đảm bảo dữ liệu có giá trị nhất không bị xoá.

Ví dụ về trường hợp sử dụng

Để minh hoạ nơi bộ chứa lưu trữ sẽ phát huy hiệu quả, hãy tưởng tượng một ứng dụng email. Sẽ không thể tha thứ nếu ứng dụng làm mất các bản nháp chưa được gửi của người dùng chỉ tồn tại trên ứng dụng. Ngược lại, nếu các thư viện này được lưu trữ trên máy chủ, thì người dùng có thể sẽ không cần xoá một số email cũ nhất trong hộp thư đến khỏi ứng dụng nếu trình duyệt của họ chịu áp lực lớn về bộ nhớ.

Giao diện ứng dụng email
Ứng dụng email có các bộ chứa lưu trữ riêng cho hộp thư đến và thư nháp. (Chỉ nhằm mục đích minh hoạ, tài liệu này không nhất thiết phản ánh cách hoạt động của Gmail.)

Sử dụng Storage Buckets API (API Bộ chứa lưu trữ)

Tạo bộ chứa lưu trữ mới

Bạn có thể tạo một bộ chứa lưu trữ mới bằng phương thức open() trên giao diện StorageBucketManager.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

Tạo một bộ chứa lưu trữ mới và cố định

Để đảm bảo bộ chứa lưu trữ được duy trì, bạn có thể chuyển các đối số tuỳ chọn durabilitypersisted vào phương thức open():

  • persisted xác định xem có nên duy trì bộ chứa lưu trữ này hay không. Các giá trị được phép là false (mặc định) hoặc true.
  • durability cung cấp gợi ý cho trình duyệt để giúp đánh đổi hiệu suất ghi với mức giảm rủi ro mất dữ liệu trong trường hợp mất điện. Các giá trị được phép là 'relaxed' (mặc định) hoặc 'strict':

    • 'strict' bộ chứa cố gắng giảm thiểu rủi ro mất dữ liệu khi mất điện. Điều này có thể khiến hiệu suất giảm đi, nghĩa là việc ghi có thể mất nhiều thời gian hơn để hoàn thành, có thể ảnh hưởng đến hiệu suất tổng thể của hệ thống, có thể tốn nhiều pin hơn và có thể làm hao mòn thiết bị lưu trữ nhanh hơn.
    • Bộ chứa 'relaxed' có thể "quên" các lượt ghi đã hoàn tất trong vài giây trước khi xảy ra tình trạng mất pin. Đổi lại, việc ghi dữ liệu vào các bộ chứa này có thể có đặc điểm hiệu suất tốt hơn và có thể kéo dài thời lượng pin, cũng như có thể giúp kéo dài thời gian lưu trữ của thiết bị. Ngoài ra, tình trạng mất điện sẽ không dẫn đến hỏng dữ liệu ở mức cao hơn so với bộ chứa 'strict'.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

Truy cập các API lưu trữ từ một bộ chứa lưu trữ

Mỗi bộ chứa lưu trữ được liên kết với các API lưu trữ, ví dụ: IndexedDB, giao diện Bộ nhớ đệm hoặc giao diện Tệp. Các API lưu trữ này hoạt động như bình thường, chỉ là điểm truy cập là từ giao diện StorageBucket, ví dụ: StorageBucket.indexedDB.

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

Gỡ lỗi bộ chứa lưu trữ trong Công cụ cho nhà phát triển

Kiểm tra bộ chứa lưu trữ trong cây chuyên dụng trong phần Ứng dụng > Bộ nhớ.

Trước và sau khi bật cây bộ chứa lưu trữ trong phần Bộ nhớ.

Tài nguyên hữu ích