支持 FileSystemSyncAccessHandle 的多个读取器和写入器,以及 FileSystemWritableFileStream 的独占写入器。
FileSystemSyncAccessHandle 的多个读取器和写入器
借助源专属文件系统(有时也称为存储分区文件系统),开发者可以访问经过优化以实现最大读写性能的文件。这通过 FileSystemSyncAccessHandle
对象实现。目前,如果尝试为同一文件条目打开多个 FileSystemSyncAccessHandle
对象,会失败并返回 NoModificationAllowedError
。由于在某些用例中,此约束条件会造成限制,因此 Chrome 121 为 FileSystemFileHandle.createSyncAccessHandle()
方法引入了新的 mode
参数,其允许的字符串值如下:
"readwrite"
:这是当前的默认值。打开后,系统会允许使用FileSystemSyncAccessHandle
上的任何方法。只允许一个FileSystemSyncAccessHandle
实例。"read-only"
:允许多个读取器。打开后,系统仅允许对FileSystemSyncAccessHandle
使用类似读取的方法:read()
、getSize()
和close()
。可以创建多个FileSystemSyncAccessHandle
实例,只要所有实例均处于只读模式即可。"readwrite-unsafe"
:允许多个写入器。打开后,系统会允许使用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 审核。