FileSystemSyncAccessHandle の複数のリーダー / ライターと FileSystemWritableFileStream の排他的なライターをサポートします。
FileSystemSyncAccessHandle の複数のリーダーとライター
オリジンのプライベート ファイル システム(バケット ファイル システムとも呼ばれる)を使用すると、デベロッパーは読み書きのパフォーマンスを最大化するように最適化されたファイルにアクセスできます。これは、FileSystemSyncAccessHandle
オブジェクトを介して行われます。現在、同じファイル エントリに対して複数の FileSystemSyncAccessHandle
オブジェクトを開こうとすると、NoModificationAllowedError
で失敗します。この制約が限定的になるユースケースに対応するため、Chrome 121 では、以下の使用できる文字列値を持つ FileSystemFileHandle.createSyncAccessHandle()
メソッドに新しい mode
パラメータが導入されています。
"readwrite"
: これが現在のデフォルトです。開くと、FileSystemSyncAccessHandle
のメソッドがすべて許可されます。FileSystemSyncAccessHandle
のインスタンスは 1 つだけ指定できます。"read-only"
: 複数のリーダーを使用できます。開くと、FileSystemSyncAccessHandle
の読み取りに似たメソッド(read()
、getSize()
、close()
)のみが許可されます。FileSystemSyncAccessHandle
のインスタンスはすべて読み取り専用モードであれば、複数のインスタンスを作成できます。"readwrite-unsafe"
: 複数のライターを許可します。開くと、FileSystemSyncAccessHandle
のメソッドがすべて許可されます。FileSystemSyncAccessHandle
のインスタンスは複数作成することができますが、すべてのインスタンスが読み取り書き込み可能 - セーフモードである場合に限ります。
現在の動作を維持するには、"readwrite"
オプションをデフォルトのままにしておきます。デフォルトでは、一度に 1 つのインスタンスしか許可されません。サイトで複数の FileSystemSyncAccessHandle
オブジェクトを開く必要があり、書き込みを行う必要がない場合は、"read-only"
オプションを使用します。最後の "readwrite-unsafe"
オプションは、複数のインスタンスと読み取りと書き込みの両方を可能にします。この場合、複数のタブから書き込みが行われると際どいものになり、サイトでは独自のロック スキームを提供する必要があります。
const handle1 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
// This will succeed:
const handle2 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
FileSystemWritableFileStream の専用ライター
FileSystemSyncAccessHandle
と異なり、現在はファイル エントリごとに FileSystemWritableFileStream
の複数のインスタンスを作成できます。欠けているのは、独占的なライターにオプションを提供する方法です。Chrome 121 では、次の値を持つオプションの mode
パラメータが FileSystemAccessFileHandle.createWritable()
メソッドに追加されました。
"exclusive"
モード: 同時に存在できるライターは 1 つだけです。"siloed"
モード: 現在のデフォルトです。作成されたライターごとに、独自のスワップ ファイルがあります。
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();
ブラウザ サポート
どちらの機能(FileSystemSyncAccessHandle
の複数のリーダー / ライターおよび FileSystemWritableFileStream
の専用ライター)も、Chrome 121 でサポートされています。
開発環境トライアルの開始
デベロッパー トライアルを開始して Chrome 121 のリリース前に機能をテストするには、chrome://flags
の #file-system-access-locking-scheme
フラグを [Enabled] に設定します。これにより、マシン上でローカルでこの機能をテストできます。
謝辞
この記事は Daseul Lee、Nathan Memmott、Rachel Andrew によってレビューされました。