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

O sistema de arquivos particular de origem (também chamado de sistema de arquivos do bucket) permite que os desenvolvedores acessem arquivos otimizados para o máximo desempenho de leitura e gravação. Isso acontece com objetos FileSystemSyncAccessHandle. No momento, a tentativa de abrir vários objetos FileSystemSyncAccessHandle para a mesma entrada de arquivo falha com um NoModificationAllowedError. Como há casos de uso em que essa restrição é limitadora, o Chrome 121 apresenta um novo parâmetro mode para o método FileSystemFileHandle.createSyncAccessHandle() com os seguintes valores de string permitidos:

  • "readwrite": é o padrão atual. Depois de aberto, todos os métodos em FileSystemSyncAccessHandle são permitidos. Apenas uma instância de FileSystemSyncAccessHandle é permitida.
  • "read-only" : permite vários leitores. Depois de abertos, apenas métodos de leitura em FileSystemSyncAccessHandle são permitidos: read(), getSize() e close(). Várias instâncias de FileSystemSyncAccessHandle podem ser criadas, desde que todas estejam no modo somente leitura.
  • "readwrite-unsafe": permite vários gravadores. Depois de aberto, todos os métodos em FileSystemSyncAccessHandle são permitidos. Várias instâncias de FileSystemSyncAccessHandle podem ser criadas, desde que todas estejam no modo de leitura e gravação não seguro.

O comportamento atual é preservado mantendo a opção "readwrite" como padrão, o que permite apenas uma instância por vez. Se um site precisar abrir vários objetos FileSystemSyncAccessHandle, mas não precisar 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 lentas se forem realizadas em várias guias, e os sites precisarão 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 de FileSystemWritableFileStream

Ao contrário de FileSystemSyncAccessHandle, várias instâncias de FileSystemWritableFileStream podem ser criadas por entrada de arquivo atualmente. O que falta é uma opção para um escritor exclusivo. O Chrome 121 adiciona um parâmetro mode opcional ao método FileSystemAccessFileHandle.createWritable() com os seguintes valores:

  • Modo "exclusive": apenas um escritor pode existir por vez.
  • Modo "siloed": é o padrão atual. Cada escritor criado terá seu 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 gravadores no FileSystemSyncAccessHandle e gravador exclusivo para FileSystemWritableFileStream, são compatíveis a partir do Chrome 121.

Entre no teste do 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 em chrome://flags como Ativada. Isso permite testar o recurso localmente na sua máquina.

Agradecimentos

Este artigo foi revisado por Daseul Lee, Nathan Memmott e Rachel Andrew.