Melhorias na API para trabalhar com arquivos no navegador

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 no FileSystemSyncAccessHandle serão permitidos. Apenas uma instância de FileSystemSyncAccessHandle é permitida.
  • "read-only" : permite vários leitores. Depois de abertos, apenas métodos semelhantes a leitura em FileSystemSyncAccessHandle são permitidos: read(), getSize() e close() É possível criar várias instâncias de FileSystemSyncAccessHandle, desde que todas estejam no modo somente leitura.
  • "readwrite-unsafe": permite vários escritores. Depois de aberto, todos os métodos no FileSystemSyncAccessHandle serão permitidos. É possível criar várias instâncias de FileSystemSyncAccessHandle, 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.