스크립트
00:00:00criar aplicativos desktop multiplataforma costumava significar recorrer ao Electron, mas hoje em dia estamos
00:00:04mimados pela variedade. Então, para esclarecer qualquer confusão, hoje estamos comparando as três melhores opções para
00:00:09criar aplicativos desktop multiplataforma: vamos analisar o Tauri, escrito em Rust, o Electro-Bun, do time do Bun,
00:00:14e o Deno Desktop, a nova oferta do Deno. Também usaremos o Electron como base, e se você
00:00:20quiser ver uma ferramenta diferente abordada neste canal, é só me avisar nos comentários.
00:00:23Vamos comparar quatro pontos: tamanho do pacote, desempenho de inicialização, desempenho em tempo de execução e experiência
00:00:29do desenvolvedor. Construí o mesmo aplicativo quatro vezes: uma ferramenta de gravação de tela que permite editar os resultados
00:00:35em uma linha do tempo e exportar para MP4. Escolhi especificamente esse tipo de app porque o processamento de vídeo
00:00:40pode levar esse tipo de ferramenta aos seus limites. É claro que nem tudo se resume a desempenho;
00:00:44o conjunto de habilidades da sua equipe e o tipo de produto que você está construindo influenciarão o tipo de
00:00:49framework que você escolher, mas espero que isso possa te dar alguma orientação sobre o que esperar.
00:00:58Então, vamos pular rapidamente para uma demonstração do aplicativo que construímos. Começamos iniciando
00:01:03nosso app, podemos escolher qual tela gravar e então clicar no botão de gravar. Agora podemos fazer uma gravação curta
00:01:08da tela. Assim que terminarmos, podemos pressionar parar e uma janela aparecerá com nossa gravação na
00:01:12linha do tempo. Podemos cortar isso para remover espaços vazios e então clicar em exportar para gerar um MP4. O app é
00:01:18na verdade incrivelmente simples, mas como estamos usando múltiplas APIs, gravando e processando vídeo e
00:01:24renderizando a interface, isso deve ser um bom teste. Então, a primeira coisa que vamos verificar é o
00:01:28tamanho do pacote, e lembre-se: esses apps fornecem funcionalidades idênticas. O Electron, como base, tem 323
00:01:35megabytes, o Tauri chega a apenas 57 megabytes, o Electro-Bun tem 418 megabytes e o Deno tem 111 megabytes.
00:01:44Todos eles também têm o FFmpeg embutido para exportação em MP4, e só isso já adiciona 45 megabytes. O Electro-Bun é tão
00:01:52grande porque tive que enviar o Chromium junto com ele. Tentei muito, mas literalmente não consegui
00:01:56fazer a gravação de tela funcionar com o Webview nativo do sistema, especificamente para gravar via JavaScript.
00:02:01Você precisa da API de captura de tela e da função “getDisplayMedia”. Você pede a tela ao navegador,
00:02:06ele te entrega um stream, o gravador de mídia o codifica e é assim que o Electron e o Deno fazem. O Electro-Bun
00:02:12não inclui essa API, então a única forma de acessar é reintroduzir o Chromium, e isso
00:02:17traz um excesso de 200 megabytes. A API do Deno implementou isso, então é o mesmo código
00:02:24mas sem o Chromium, e é por isso que o tamanho do pacote do Deno acaba sendo cerca de 100 megabytes e o do Electro-
00:02:30Bun fica mais próximo de 400. O Rust não precisou de nada disso porque o Tauri não grava a partir
00:02:35do Webview; ele faz tudo pelo backend através do kit nativo de captura de tela. Esse é
00:02:40o mesmo framework do macOS que o QuickTime usa, e tudo é gravado diretamente do backend. Você fornece
00:02:46a ele uma tela, um codec e um caminho de arquivo, e ele escreve o arquivo sozinho. O Webview é apenas a interface, nunca
00:02:52toca em um único frame. E você também ganha coisas de graça que a versão em JavaScript precisa lidar:
00:02:56o kit de captura de tela mistura seu microfone e o áudio do sistema automaticamente e finaliza um MP4 adequado. Eu
00:03:02também deixei o FFmpeg dentro do app Tauri para podermos exportar para formatos diferentes, mas tecnicamente isso é
00:03:07opcional. Ok, agora podemos iniciar esses apps para detectar o tempo de inicialização, e escrevi um script
00:03:13que faz isso 10 vezes para que eu possa pegar a mediana. O Electron, como base, levou 273 milissegundos. O Tauri
00:03:19levou 311 milissegundos, o Electro-Bun levou 773 milissegundos e o Deno levou 242 milissegundos.
00:03:29A surpresa aqui para mim foi que o Tauri não foi o mais rápido; ele fica um pouco atrás do Electron, e o Deno
00:03:34superou todos. A suposição seria que Rust mais o Webview do sistema significaria inicializações
00:03:39instantâneas, mas como o motor de renderização ainda precisa inicializar de qualquer maneira, é provavelmente isso que contribui para
00:03:44a velocidade de inicialização um pouco mais lenta. O Electro-Bun é o ponto fora da curva, quase três vezes o Electron; ele inicia
00:03:50um launcher que inicia o Bun, que inicia o Chromium. Três runtimes em cadeia, e você realmente sente isso.
00:03:56Agora vamos analisar a memória após o lançamento. Assim que o app está realmente em execução, o Electron é a base
00:04:01novamente, com 128 megabytes. O Tauri ficou em 109 megabytes, o Electro-Bun em 208 megabytes e o Deno em 98
00:04:10megabytes. Então, Deno e Tauri ficaram basicamente empatados, e o Electro-Bun foi basicamente o dobro de todo o resto.
00:04:15Para o Tauri, isso não chega nem perto da melhoria de 10x que o marketing sugere. No disco, sim, é muito
00:04:21menor, mas o uso real de memória quando o aplicativo está rodando é muito mais parecido com as outras
00:04:26ferramentas. E uma coisa para ficar de olho quando você estiver fazendo esses testes: o Tauri usa o
00:04:31Webview do sistema, e esses processos não são filhos do seu app; o macOS os inicia separadamente. Então,
00:04:36o Monitor de Atividade mostra o Tauri com cerca de 36 megabytes, e parece que ele supera o Electron três vezes,
00:04:42mas não supera. Quando você soma todos esses processos, os 36 megabytes chegam mais perto de 109 megabytes,
00:04:48que é o que registramos no teste. Em termos da gravação de tela em si, notei um desempenho muito melhor
00:04:53no app Tauri, e isso provavelmente porque não estamos gravando os dados no Webview
00:04:58e transferindo através de uma ponte; em vez disso, tudo é gravado com o SDK nativo que vem
00:05:04com o sistema. Se você quer chegar perto de gravações a 60 fps, então Rust e Tauri serão o
00:05:10caminho a seguir. Agora vamos ver a experiência do desenvolvedor, e devido às diferenças de cada plataforma, este app simples
00:05:15não foi nada direto de construir. No geral, Electron e Tauri foram os mais fáceis de
00:05:20implementar, mas Deno e Electro-Bun tiveram muitos problemas e travamentos do sistema. No Deno, quando
00:05:26iniciávamos uma gravação e depois ocultávamos o app, o aplicativo inteiro simplesmente fechava. Acho que isso acontece porque
00:05:30quando nenhuma tela permanece visível, o Deno apenas assume que o aplicativo terminou e, portanto, encerra
00:05:36o processo inteiro. Então, a solução paliativa para isso foi apenas esconder a visualização fora da tela.
00:05:41Electro-Bun teve todos esses problemas relacionados à necessidade de empacotar o Chromium para a gravação de tela e, por algum
00:05:46motivo, o pacote depende de Three.js e Babylon.js, que são para renderização 3D, o que contribuiu para o
00:05:53tamanho inchado do pacote. Então, no geral, pessoalmente, eu escolheria o Tauri, mas se você realmente não quer programar
00:05:58em Rust, o Electron ainda é a plataforma madura para desenvolvedores TypeScript. O Deno parece ok, mas acho que
00:06:04a plataforma ainda precisa de algum tempo para amadurecer, e o Electro-Bun, para mim, foi o pior de todos.
00:06:09Espero que você possa tirar suas próprias conclusões. Me conte o que achou nos comentários. Também já
00:06:13fizemos um vídeo inteiramente sobre Deno Desktop, então se você quiser aprender mais sobre isso, clique neste
00:06:18vídeo aqui. Fora isso, eu sou o Warren da BetterStack, obrigado por assistir e nos vemos na próxima.