ストレージの性質はさまざま: ストレージ バケットの導入

Storage Standard では、永続ストレージとストレージ用の API が定義されています。 割り当ての見積もり、プラットフォームのストレージ アーキテクチャです。 負荷の高い環境で永続ストレージのエビクションを行う API をリリースします 予測しやすくなります。Chromium 122 以降で使用できます。

ストレージ標準を採用することでどのような問題が解決されますか。

従来は、ユーザーがデバイスの保存容量を使い切ると、次のような API で保存されたデータが IndexedDB または localStorage は、ユーザーが介入できないうちに失われます。データ アナリストが ストレージの永続化方法としては、 persist() メソッド( StorageManager インターフェース。同時にエンドユーザーに許可をリクエストし、 永続ストレージにすると、次のことが可能になります。

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

ストレージの保持をリクエストする方法は、オールかゼロかです。表現の幅を広げたり、 きめ細かい永続性のニーズに対応できます。すべて 1 つの Storage バケットです

Storage Buckets API

Storage Buckets API の基本となる考え方は、 サイトは複数のストレージ バケットを作成でき、ブラウザは必要に応じて 他のバケットとは独立して各バケットを削除できます。これにより、デベロッパーは 重要なデータが削除されないようにすること

ユースケースの例

ストレージ バケットがどのような場面で役立つかを説明するために、メール アプリケーションを考えてみましょう。次のようになります。 ユーザーの未送信の下書きがクライアント上にのみ存在した場合、アプリはこの責任を負いません。反対に サーバーに保存されている場合、最も古い受信トレイのメールでもおそらく問題はありません。 ブラウザに大きなストレージ負荷がかかっている場合に、クライアントから削除するよう指示できます。

<ph type="x-smartling-placeholder">
</ph> メールアプリのインターフェース
受信トレイと下書き用に個別のストレージ バケットを備えたメールアプリ。(説明のみを目的としたもので、必ずしも Gmail の仕組みを反映しているわけではありません)。

Storage Buckets API を使用する

新しい Storage バケットを作成する

StorageBucketManageropen() メソッドを使用して、新しいストレージ バケットを作成できます。 行うことができます。

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

永続的なストレージ バケットを作成する

ストレージ バケットが保持されるようにするには、durability オプションと persisted オプションを渡します。 open() メソッドに渡します。

  • persisted は、ストレージ バケットを保持するかどうかを決定します。指定できる値は次のとおりです。 false(デフォルト)または true
  • durability は、書き込みパフォーマンスと書き込みパフォーマンスのトレードオフに役立つヒントをブラウザに提供します。 停電時のデータ損失リスクが低減します。指定できる値は 'relaxed' です (デフォルト)または 'strict':

    • 'strict' バケットは、停電時のデータ損失リスクを最小限に抑えます。ここにあるのは パフォーマンスの低下(書き込みの完了に時間がかかる)によるコストが、 システム全体のパフォーマンスが低下します。バッテリーの消費量が増え、ストレージ デバイスのバッテリーが消耗する可能性があります。 迅速に進めることができます。
    • 'relaxed' 個のバケットが「削除」される可能性があります数秒以内に完了した書き込みの合計数です。 停電が発生します。その見返りとして、これらのバケットにデータを書き込むと、パフォーマンスが向上する可能性があります。 バッテリーを長持ちさせることができます。また、保存期間が長くなる可能性があります デバイスの耐用年数です。また、停電によるデータの破損の割合が '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`.
});

Storage バケットから Storage API にアクセスする

各ストレージ バケットは、Storage API に関連付けられます。たとえば、 IndexedDB の場合、 [Cache] インターフェース File インターフェース。これらのストレージ API は エントリ ポイントは StorageBucket インターフェースから来るだけです。次に例を示します。 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);
});

DevTools でのストレージ バケットをデバッグする

[Application] の専用ツリーでストレージ バケットを検査します。ストレージ セクション。

[ストレージ] セクションでストレージ バケットツリーを有効にする前と後。

関連リソース