- O desenvolvedor reescreveu o Desktop Docs, que antes era um app para Mac feito em Electron, em Rust e concluiu que foi a escolha certa
- O app inicial feito em Electron tinha 1 GB de tamanho e sofria com problemas de desempenho, além de travar com frequência
- Havia, em especial, um problema de queda de desempenho no processamento de imagens/vídeos em grande escala
- Após reconstruí-lo com Rust + Tauri, o tamanho do app foi reduzido em 83%, a velocidade de indexação melhorou mais de 3 vezes e a estabilidade também aumentou
- Tamanho do app: 1GB → 172MB (83% menor)
- Instalador: 232MB → 69.5MB (70% menor)
- Indexação de vídeo: para um vídeo de 38 minutos, 10~14 minutos → 3 minutos
- Execução muito mais estável em comparação com o app Electron, que era instável
- Processo de reconstrução e escolhas
- Mesmo em segundo plano, o app em Electron fazia com que o próprio Chromium usasse mais de 200MB de memória, e até chamadas de vídeo causavam crashes
- No novo app, os embeddings do CLIP e o armazenamento vetorial com Redis foram mantidos
- Porém, em Rust, foi reescrito todo o pipeline de processamento de imagem/vídeo e I/O de arquivos
- A UI também foi refeita do zero, em vez de portar o código existente, resultando em uma interface mais limpa e simples
- Dificuldades técnicas
- A curva de aprendizado de Rust é alta, e a comunidade do Tauri ainda é menos madura do que a do Electron
- Ao empacotar o Redis dentro do app, houve problemas de permissões e distribuição
- Ainda assim, houve melhora geral de controle e desempenho em relação ao Electron
- Conclusão
- Ainda não há equivalência total de funcionalidades, mas os recursos principais funcionam de forma muito mais rápida e estável
- “Código que funciona, mas foi mal construído, deve ser descartado sem hesitação”
7 comentários
O Electron incorpora o Chromium, e o Tauri usa o mecanismo instalado no sistema operacional, então há essa diferença.
O Tauri (OS WebView)** é vantajoso quando são necessárias distribuição leve e desempenho rápido,
mas, em serviços nos quais segurança, confiabilidade e controle de funcionalidades são importantes, a abordagem do Electron (Chromium incorporado) é mais adequada.
Não sei bem qual é o problema do código, mas acho que as características da plataforma se refletem bastante.
Se for Flutter, o
rinftambém é muito bom.Já usei Electron, mas nunca mexi com Tauri; acho que preciso experimentar pelo menos uma vez.
Comentários do Hacker News
Estou criando um app desktop com Rust e egui, mas é a minha primeira vez tanto com Rust quanto com desenvolvimento desktop, então sinto que está difícil aprender conceitos demais de uma vez. Minha área é ferramenta de análise para engenharia mecânica, então o backend precisa de alto desempenho e o frontend precisa de visualização de dados. Fico curioso para saber se, ao usar Tauri, não foi difícil gerenciar várias stacks ao mesmo tempo, como rust, js e html
Recentemente tive a experiência de migrar um projeto de Tauri para Electron. Foi uma dor de cabeça por causa das diferenças de renderização entre as webviews usadas em várias plataformas. Fico curioso para saber se você já teve bugs de UI em ambiente cross-platform. Os requisitos de UI são simples e os cálculos são complexos, então acho que mesmo com custo de QA ainda valeria a pena. Queria saber se a minha experiência foi algo fora do comum ou se diferenças de renderização são mesmo um problema frequente. E também queria saber se você usou Tauri 1.0 ou 2.0. Eu estava migrando do v1 quando a versão 2.0 foi lançada oficialmente, e a migração foi um pesadelo, além de a documentação ser realmente fraca. Queria saber se agora a documentação melhorou
Eu também já passei por um caminho parecido. Criei um visualizador simples de webcam otimizado para microscópios USB, porque não havia nada bom e acabei fazendo o meu próprio. Implementei quase todos os recursos no renderer. Quando fui preparar o envio para a App Store, comecei a me perguntar se fazia sentido um visualizador de webcam de 500 MB, então portei para Tauri V2 e reduzi o tamanho para perto de 15 MB
Gosto muito da proposta deste app. Outros apps dessa área muitas vezes são lentos demais e incômodos de usar, então tenho bastante interesse no rewrite. Só que, como fotógrafo, grande parte da minha mídia está em formato RAW, e não tenho certeza se isso é suportado — ou talvez não seja, já que RAW parece ausente de “todos os principais formatos de imagem e vídeo”. Fico curioso para saber se existe documentação oficial, fórum de usuários ou algum outro canal onde eu possa confirmar esses detalhes
Eu nem sou usuário de Mac, e a nossa equipe também não está considerando um rewrite em Rust, mas fiquei muito feliz com este post. É exatamente esse tipo de texto no “Show HN” que eu espero ver: algo com esse nível de extensão, resumindo os trade-offs técnicos necessários para resolver problemas do mundo real. Obrigado
Seria muito bom ter benchmarks atualizados comparando Tauri, Flutter, Electron, React Native e outros frameworks cross-platform modernos. As principais métricas seriam tamanho do bundle, uso de memória (RAM), tempo de inicialização, uso de CPU sob carga, espaço em disco etc. Especialmente em frameworks como Tauri, onde renderização e desempenho variam conforme a versão da webview, acho que também seria útil incluir uma matriz de compatibilidade por plataforma (WebView2, WKWebView etc.). Se essas diferenças fossem organizadas visualmente em tabela, os desenvolvedores conseguiriam tomar decisões muito melhores
Na empresa anterior, eu fazia manutenção de um app desktop em Electron para Windows e Mac. O app era pesado demais, e atualizar com Squirrel era um sofrimento.
No fim, mantivemos a GUI como uma SPA web (baseada em Inferno), mas trocamos o carregamento da webview e afins por pequenos apps nativos em cada plataforma (C# e Swift). Com isso, o tamanho de download e o uso de memória caíram cerca de 90%, e migramos a distribuição e as atualizações para as app stores de cada plataforma. Acho que foi a melhor decisão que tomamos
Tenho preocupação com tempo de aprovação e incerteza nas atualizações, então fico curioso sobre o que melhorou ao sair do Squirrel para algo nativo
Se o app final é para Mac, estou realmente curioso para saber por que você escolheu Rust/Tauri em vez de Swift/SwiftUI
Fico curioso para saber o que levou você a escolher Tauri em vez de egui. Foi por causa da experiência com Electron? Eu também quero portar um app em Python Qt para Rust, mas tenho receio de acabar travando no meio do caminho porque as bibliotecas de GUI em Rust ainda não são tão completas quanto o Qt
Ao ver o botão "Try" na landing page principal, o usuário fica com a sensação de que haverá uma versão de teste, mas na prática ele vai direto para a compra. Seria bom ter nem que fosse um teste de 1 semana.
Sou fã da política de licença perpétua com backup. US$ 99 é uma barreira de entrada bem alta, mas se o alvo são criadores/estúdios isso faz sentido; para consumidor comum, algo entre US$ 20 e US$ 25 talvez parecesse adequado.
O texto enfatiza desempenho, mas a landing page não menciona isso em nenhum momento. Assim como no vídeo de 38 minutos, informações como benchmarks, trabalho em paralelo e requisitos de VRAM também são importantes. Fico curioso para saber como isso se comporta na prática ao processar centenas ou milhares de horas de mídia.
É surpreendente que uma tarefa que levava 10 a 14 minutos no Electron tenha caído para 3 minutos em Tauri. Como o Electron só estava orquestrando CLIP e ffmpeg, fico curioso para saber de onde vinha esse overhead todo.
No passado eu também criei com Electron uma ferramenta de busca em mídia baseada em transcrição de vídeo, e não tive grandes problemas de desempenho.
Normalmente a razão para escolher Electron ou Tauri é ser cross-platform, então fico curioso para saber por que o app é só para Mac desde o início, especialmente se ele processa mídia pesada, caso em que até o uso de Nvidia seria possível.
Também voltei a usar Swift recentemente depois de 10 anos e, ao decidir entre ele e Tauri para um projeto novo, acabei escolhendo Swift; comparado a 2014, evoluiu muito e a experiência foi quase totalmente agradável.
Se a seção sobre usuários ativos for verdadeira, parece que você já alcançou um sucesso considerável. Fico curioso para saber se você já tinha rede de contatos ou audiência prévia no mercado de estúdios/criadores. Também gostaria de ouvir sobre a parte de marketing
Você disse que criou uma ferramenta parecida; fico curioso para saber por que não a lançou.
Também pretendemos lançar versões para Windows e Linux nos próximos meses, caso haja demanda.
Conseguimos usuários com HN, lançamento no Reddit e alguma divulgação no LinkedIn. A maior parte veio por boca a boca.
Sobre o desempenho no Electron e no processamento de vídeo, daria para falar bastante mais a fundo. Eu também não sou especialista em Electron, então talvez tenha havido gargalos porque não usamos workers corretamente.
Ao migrar para Rust, também introduzimos detecção de cena, reduzindo a quantidade de frames a indexar, o que diminuiu bastante a carga de processamento. Também adicionamos opções de aceleração por GPU do ffmpeg, o que melhorou bastante o desempenho. E a geração de embeddings de imagem também foi otimizada com processamento em lote. Só que, se você exagerar, a instância do modelo pode acabar travando
No gráfico de comparação de desempenho linkado no HN, o Electron parece ser melhor que o Tauri na maioria dos casos....
A comparação de desempenho nos comentários dá bastante a impressão de ter pinçado, dentre os valores do repositório, os que favorecem o Electron. Os números diferem um pouco, mas o dado mais parecido parece ser a parte que compara a "diferença entre a memória livre antes da execução e a memória livre depois da execução". No entanto, no item logo acima, a soma da memória do processo principal com os processos filhos durante a execução está registrada em 258M para o Electron, então fica difícil concordar com a parte que diz que a variação no uso de memória entre antes e depois da execução foi de 91MB. Também há uma resposta no HN dizendo que o tempo de inicialização de um app feito com Tauri apareceu como mais de 7 segundos, o que reforça que é difícil confiar nos números medidos no repositório.
Hum, acho que a maioria dos problemas vem mais de questões do mecanismo WebView + SO/drivers do que das diferenças entre Electron e Tauri.