支援 FileSystemSyncAccessHandle 的多個讀取器和寫入器,以及 FileSystemWritableFileStream 的專屬寫入器。
FileSystemSyncAccessHandle 的多個讀取器和寫入者
來源私人檔案系統 (有時也稱為值區檔案系統) 可讓開發人員存取經過最佳化處理的檔案,以便提升讀取和寫入效能。這項操作會透過 FileSystemSyncAccessHandle
物件執行。目前,嘗試為同一個檔案項目開啟多個 FileSystemSyncAccessHandle
物件時,會失敗並顯示 NoModificationAllowedError
。由於有些情況會受到限制,因此 Chrome 121 針對 FileSystemFileHandle.createSyncAccessHandle()
方法導入了新的 mode
參數,並包含下列允許的字串值:
"readwrite"
:這是目前的預設值。開啟後,系統會允許FileSystemSyncAccessHandle
上的任何方法。系統只允許一個FileSystemSyncAccessHandle
例項。"read-only"
:允許多個讀者。開啟後,系統只會允許FileSystemSyncAccessHandle
上的類似讀取方法:read()
、getSize()
和close()
。只要所有FileSystemSyncAccessHandle
皆處於唯讀模式,即可建立多個FileSystemSyncAccessHandle
例項。"readwrite-unsafe"
:允許多位作者。開啟後,系統會允許FileSystemSyncAccessHandle
上的任何方法。只要所有FileSystemSyncAccessHandle
皆處於讀寫不安全模式,即可建立多個FileSystemSyncAccessHandle
例項。
將 "readwrite"
選項設為預設值,即可保留目前的行為,也就是一次只允許一個執行個體。如果網站需要開啟多個 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"
模式:一次只能有一位寫入者。"siloed"
模式:這是目前的預設模式。每個建立的寫入器都會有專屬的交換檔案。
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();
瀏覽器支援
自 Chrome 121 起,系統支援 FileSystemSyncAccessHandle
的多位讀者和作家,以及 FileSystemWritableFileStream
的專屬作家。
進入開發人員試用階段
如要在 Chrome 121 推出前進入開發人員試用版來測試這項功能,請將 chrome://flags
中的 #file-system-access-locking-scheme
標記設為「Enabled」。這樣一來,您就能在本機上測試這項功能。
特別銘謝
本文由 Daseul Lee、Nathan Memmott 和 Rachel Andrew 共同審查。