Suporte a vários leitores e gravadores para FileSystemSyncAccessHandle e gravador exclusivo para FileSystemWritableFileStream.
Vários leitores e gravadores para FileSystemSyncAccessHandle
Com o sistema de arquivos particular de origem, também conhecido como sistema de arquivos em bucket, os desenvolvedores podem acessar arquivos otimizados para maximizar o desempenho de leitura e gravação. Isso acontece por meio de objetos FileSystemSyncAccessHandle
. Atualmente, a tentativa de abrir vários objetos FileSystemSyncAccessHandle
para a mesma entrada de arquivo falha com uma NoModificationAllowedError
. Como há casos de uso em que essa restrição é limitada, o Chrome 121 introduz um novo parâmetro mode
para o método FileSystemFileHandle.createSyncAccessHandle()
com estes valores de string permitidos:
"readwrite"
: esse é o padrão atual. Depois de aberto, todos os métodos noFileSystemSyncAccessHandle
serão permitidos. Apenas uma instância deFileSystemSyncAccessHandle
é permitida."read-only"
: permite vários leitores. Depois de abertos, apenas métodos semelhantes a leitura emFileSystemSyncAccessHandle
são permitidos:read()
,getSize()
eclose()
É possível criar várias instâncias deFileSystemSyncAccessHandle
, desde que todas estejam no modo somente leitura."readwrite-unsafe"
: permite vários escritores. Depois de aberto, todos os métodos noFileSystemSyncAccessHandle
serão permitidos. É possível criar várias instâncias deFileSystemSyncAccessHandle
, desde que todas estejam no modo não seguro para leitura e gravação.
O comportamento atual é preservado, mantendo a opção "readwrite"
como padrão, o que permite apenas uma instância por vez. Caso um site precise abrir vários objetos FileSystemSyncAccessHandle
, mas não precisa executar gravações, use a opção "read-only"
. Por fim, a última opção "readwrite-unsafe"
permite várias instâncias, além de leitura e gravação. Nesse caso, as gravações podem ser potencialmente ofensivas se forem executadas em várias guias, e os sites precisariam fornecer o próprio esquema de bloqueio.
const handle1 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
// This will succeed:
const handle2 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
Gravador exclusivo para FileSystemWritableFileStream
Diferentemente do que ocorre com FileSystemSyncAccessHandle
, atualmente é possível criar várias instâncias de FileSystemWritableFileStream
por entrada de arquivo. O que está faltando é uma maneira de oferecer uma opção para um escritor exclusivo. O Chrome 121 adiciona um parâmetro mode
opcional ao método FileSystemAccessFileHandle.createWritable()
com estes valores:
- Modo
"exclusive"
: apenas um compositor pode existir por vez. - Modo
"siloed"
: é o padrão atual. Cada gravador criado terá o próprio arquivo de troca.
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();
Suporte ao navegador
Os recursos, vários leitores e escritores para FileSystemSyncAccessHandle
e escritor exclusivo de FileSystemWritableFileStream
são compatíveis a partir do Chrome 121.
Entrar no teste de desenvolvedor
Para entrar no teste do desenvolvedor e testar o recurso antes do lançamento do Chrome 121, defina a sinalização #file-system-access-locking-scheme
no chrome://flags
como Ativada. Assim você vai poder testar o recurso localmente na sua máquina.
Agradecimentos
Este artigo foi revisado por Daseul Lee, Nathan Memmott e Rachel Andrew.