Pitch: Como o AtlasDocs roda 140 ferramentas de arquivo sem enviar nada ao servidor
Quando alguém junta dois PDFs, extrai o áudio de um vídeo ou lê o texto de uma foto no AtlasDocs, o arquivo não viaja para lugar nenhum. O navegador baixa o programa que faz o trabalho, e o trabalho acontece na memória da máquina de quem usa. O resultado nasce ali e é salvo direto no dispositivo. Não existe upload, não existe fila em servidor, e não existe uma cópia do documento guardada em algum lugar esperando ser apagada.
Escrevi no blog do AtlasDocs um texto explicando como isso é possível e onde estão os limites. Aqui vai o resumo:
O que roda dentro da aba
A base é o WebAssembly, que permite executar no navegador programas escritos originalmente para computador:
- 7-Zip para arquivos compactados (via 7z-wasm)
- FFmpeg para vídeo e áudio (via ffmpeg.wasm), num Web Worker
- Tesseract para reconhecer texto em imagens (via tesseract.js)
- SQLite para bancos de dados (via sql.js)
- Leitura de RAR (via node-unrar-js); criar RAR não, por licença
- pdf-lib e pdf.js para editar e desenhar PDF
Cada motor carrega sob demanda, no primeiro uso, então a página inicial pesa o mesmo com ou sem as ferramentas pesadas. Um gate de peso no pipeline de testes impede que uma versão suba mais pesada que o limite.
As duas exceções
Duas ferramentas enviam o arquivo ao servidor: converter Word, Excel e PowerPoint para PDF, e visualizar esses documentos. Não existe hoje um programa para navegador que abra arquivos do Office com fidelidade; quem faz isso bem é o LibreOffice, que precisa de um servidor. Nesses dois casos o arquivo é convertido e descartado, e a ferramenta avisa na tela antes do envio. As outras 136 ferramentas continuam no dispositivo.
Onde está o resto
A versão completa tem o passo a passo para você conferir por conta própria na aba Network do navegador, como o código é mantido (737 testes unitários e 176 testes em navegador real por versão, Lighthouse no celular entre 94 e 97) e o que eu faria diferente se começasse hoje:
https://atlasdocs.io/blog/como-o-atlasdocs-processa-arquivos-no-navegador
Dúvidas sobre como uma conversão específica funciona, pergunte aqui nos comentários.