支持 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
标志设置为已启用。这样,您就可以在计算机本地测试该功能。
致谢
本文由 Daseul Lee、Nathan Memmott 和 Rachel Andrew 审核。