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 が確認しました。
