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 では、FileSystemAccessFileHandle.createWritable()
メソッドにオプションの mode
パラメータが追加され、次の値が設定されます。
"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
フラグを [有効] に設定します。これにより、マシンでローカルに機能をテストできます。
謝辞
この記事は、Daseul Lee、Nathan Memmott、Rachel Andrew が確認しました。