Tecnologia
Comparativo entre tecnologias para desenvolvimento mobile multiplataforma
8 minutos de leitura
Plataformas de desenvolvimento mobile multiplataforma oferecem a capacidade de criar aplicativos utilizando um código único para diversos sistemas operacionais. Entre as várias alternativas disponíveis, destacam-se três ferramentas amplamente adotadas por programadores de aplicativos móveis: Flutter, React Native e o novo .NET MAUI, substituto do Xamarin. Quais são os benefícios e limitações de cada uma destas tecnologias?
Qual é a melhor tecnologia para desenvolvimento mobile multiplataforma?
Com essas informações em mente, exploraremos cinco aspectos essenciais que podem auxiliar na escolha da plataforma mais adequada para suas necessidades. Estes cinco pontos incluem: Linguagem e ecossistema de desenvolvimento, curva de aprendizado, Recarregamento Rápido (Hot Reload), Performance e Deploy, Arquitetura Multiplataforma, Comunidade e Maturidade do framework.
Linguagem e ecossistema de desenvolvimento
A .NET MAUI utiliza a linguagem de programação C#, conhecida por sua tipagem forte e um conjunto de ferramentas robustas. Beneficia-se do amplo ecossistema de bibliotecas e pacotes do .NET, proporcionando aos desenvolvedores uma variedade de recursos para o desenvolvimento. Além disso, o .NET MAUI se integra naturalmente com ferramentas como Visual Studio e Visual Studio Code, o que o torna a opção preferencial de muitos desenvolvedores familiarizados com o ambiente .NET.
Por sua vez, Flutter adota a linguagem de programação Dart, que, apesar de não ser tão difundida quanto C# ou JavaScript, é acessível para quem já tem experiência em programação, oferecendo uma sintaxe concisa e limpa. O ecossistema de pacotes do Dart está em constante crescimento, e o sistema de plug-ins do Flutter facilita o acesso a funcionalidades nativas do dispositivo. Flutter também se destaca no suporte a ferramentas, dispondo de sua própria IDE, Flutter DevTools, e compatibilidade com editores de código populares.
Já o React Native utiliza JavaScript, uma das linguagens de programação mais utilizadas e facilmente acessíveis. Com um vasto ecossistema de bibliotecas e frameworks disponíveis, os desenvolvedores têm à disposição uma ampla variedade de soluções para desafios comuns. O suporte do React Native ao recurso de hot reload permite ciclos de desenvolvimento mais rápidos, possibilitando aos desenvolvedores visualizar mudanças em tempo real e acelerando o processo de desenvolvimento.
Curva de aprendizado
Para desenvolvedores que já têm experiência com C# e .NET, a transição para o .NET MAUI tende a ser mais tranquila, oferecendo uma curva de aprendizado relativamente suave. No entanto, para aqueles que são novos em C# e no ecossistema .NET, pode haver um período de ajuste necessário para se familiarizar com a linguagem e a estrutura específica do .NET MAUI.
Quanto ao Flutter, sua abordagem única baseada em widgets para a construção de interfaces de usuário pode ser vista tanto como uma vantagem quanto um desafio. Desenvolvedores que já trabalham com UIs declarativas podem achar essa abordagem mais intuitiva e fácil de aprender. Por outro lado, para aqueles acostumados com métodos mais tradicionais e imperativos de desenvolvimento de UI, a curva de aprendizado pode ser inicialmente mais íngreme.
Em relação ao React Native, a utilização de JavaScript e React o torna bastante acessível para uma ampla gama de desenvolvedores, especialmente aqueles já familiarizados com essas tecnologias. Para quem já tem experiência com JavaScript e React, adaptar-se ao React Native pode ser um processo relativamente simples e direto, facilitando o desenvolvimento de aplicativos móveis utilizando conhecimentos e habilidades já adquiridos.
Hot Reload
Hot Reload é uma funcionalidade moderna e de grande impacto no desenvolvimento. Permite a atualização automática dos aplicativos em tempo de construção. Estima-se um ganho de até 50% de produtividade comparado com a plataformas que não oferecem a mesma funcionalidade durante a fase de desenvolvimento.
Todas as tecnologias mencionadas incluem a funcionalidade de Recarga Rápida, mas é crucial enfatizar a maturidade avançada do Flutter e do React Native neste aspecto. No caso do MAUI, até o momento atual, o Hot Reload têm demonstrado limitações, como o encerramento inesperado do aplicativo em certas circunstâncias, falhas na detecção de alterações no código-fonte e a necessidade de interromper e reiniciar o app, o que pode comprometer sua eficácia.
No React Native, a recarga do JavaScript é eficiente e quase instantânea, atualizando apenas as partes do código que foram modificadas.
No Flutter, a dinâmica é semelhante, com atualizações imediatas de layout e código Dart, sem a necessidade de pausar a execução do aplicativo.
O processo de construção e execução em qualquer uma das tecnologias mencionadas é geralmente demorado. Cada pacote para a plataforma de destino precisa ser compilado com todas as modificações, o que ressalta o valor do Hot Reload em termos de produtividade para o desenvolvedor de aplicativos móveis.
Performance e Deploy
Todas as plataformas são projetadas com arquiteturas voltadas para alta performance, embora sigam abordagens distintas. Flutter e React Native concentram-se no mecanismo de renderização, enquanto o MAUI prioriza a integração com componentes nativos. Contudo, a diferença na experiência do usuário comparada a uma aplicação móvel nativa é quase imperceptível. Em testes com a inicialização padrão de cada plataforma, o MAUI demonstra uma ligeira superioridade em termos de uso de memória e processamento, especialmente durante eventos na interface do usuário.
Com o React Native, a escolha de uma arquitetura robusta é crucial, pois a negligência nesta etapa pode levar a problemas frequentes de desempenho. Embora a diferença seja pequena, ela é notável: o MAUI tende a consumir aproximadamente 10MB a menos de memória que as outras plataformas, mantendo um uso médio de CPU mais baixo que Flutter e React Native durante a ativação de eventos na tela.
As tecnologias híbridas são notoriamente conhecidas por produzirem aplicativos com tamanhos um pouco maiores em comparação aos desenvolvidos nativamente. Este aumento no tamanho do aplicativo varia de acordo com diversos fatores, como a qualidade das imagens utilizadas, bibliotecas empregadas, recursos de mídia e as configurações específicas de compilação.
Segue uma tabela com dados referentes ao tamanho de um aplicativo simples (um “hello world”) para a plataforma Android, utilizando cada uma dessas tecnologias:
Estrutura Multiplataforma
Essa característica representa um dos aspectos mais distintivos destas plataformas em comparação com outras opções do mercado. Com o objetivo de serem soluções completas, elas vão além do desenvolvimento de aplicativos para smartphones, abrangendo quase todos os tipos de dispositivos. As estratégias adotadas por essas plataformas buscam minimizar o impacto de gerenciar diferentes projetos simultaneamente. Observa-se, por exemplo, uma evolução significativa do MAUI em comparação ao seu antecessor, o Xamarin, adotando uma abordagem mais alinhada com a dos seus concorrentes.
Neste aspecto, o Flutter se destaca por oferecer suporte nativo a plataformas amplamente utilizadas, como Linux e Web, desde o início do projeto, representando uma vantagem considerável em termos de versatilidade e abrangência.
Comunidade
Assim como qualquer plataforma, framework, SDK e projeto Open-Source, um dos principais pontos que precisam ser percebidos é: o quanto a comunidade adota tais tecnologias, o que acaba sendo uma informação que ajuda a entender:
- Profissionais disponíveis no mercado;
- Materiais para consultas, troubleshooting, etc.;
- Componentes já construídos, testados e maduros;
- Maturidade da própria plataforma;
O Flutter se destaca como um dos maiores projetos Open-Source com contribuição, ocupando a 3ª colocação no ranking do github. Atualmente são 5 milhões de desenvolvedores Flutter e 700 mil apps desenvolvidos.
Maturidade
Ao avaliar a maturidade de uma plataforma com base em seu tempo de presença no mercado, o Flutter, lançado em 2017, destaca-se notavelmente. Com seis anos de existência, o engajamento significativo da comunidade e o interesse crescente aceleraram sua evolução e amadurecimento. Hoje, é possível encontrar uma vasta gama de componentes, fóruns ativos e uma documentação abrangente para o Flutter. Para ilustrar, o número de questões relacionadas ao Flutter no Stack Overflow atinge 191.198.
Quando comparamos com o React Native, lançado em 26 de março de 2015 , observamos um total de 138.227 questões no Stack Overflow, indicando também uma comunidade ativa e um bom nível de maturidade, embora em menor escala comparado ao Flutter. O MAUI, por outro lado, aparece como o mais recente no ranking de buscas e interesse da comunidade, com apenas 5.506 questões no Stack Overflow.
Estes números refletem não apenas o tempo de mercado de cada plataforma, mas também o nível de adoção, a quantidade de recursos disponíveis e o grau de contribuição da comunidade, que são indicadores chave para avaliar a maturidade de uma tecnologia. As imagens a seguir, obtidas dos respectivos repositórios GitHub de cada projeto, demonstram o nível de colaboração e a atividade atual de cada tecnologia.
Mesmo após alguns meses de seu lançamento, o MAUI ainda enfrenta desafios significativos, como evidenciado pelo alto número de problemas não resolvidos. Atualmente, existem cerca de 2660 issues abertas no total, incluindo várias relacionadas a problemas de performance e vazamentos de memória.
Em comparação, tanto o React Native quanto o Flutter demonstram um cenário mais positivo em termos de colaboração da comunidade e resolução de problemas. A taxa de issues resolvidas nessas plataformas é notavelmente maior do que a de novas issues sendo abertas. Isso indica um maior envolvimento da comunidade e uma maturidade mais avançada no gerenciamento de problemas e na evolução contínua das plataformas. Tais métricas são importantes indicadores da saúde e do desenvolvimento ativo de um projeto de software, refletindo diretamente na confiabilidade e na escolha da plataforma para desenvolvedores.
Esses insights do github trazem uma visibilidade do quão presente a comunidade está dentro do React Native e do Flutter. O maior destaque fica para o Flutter onde podemos perceber que a quantidade de issues abertas é menor que a quantidade de issues resolvidas. Neste período de um mês de pesquisa, foram 599 pull requests concluídos e 94 em aberto.
Recentemente foi realizada uma pesquisa de satisfação no uso de Flutter, no primeiro trimestre do ano de 2023, onde no geral 93% dos entrevistados ficaram positivamente satisfeitos, dentre eles 55% muito satisfeitos com a linguagem e tecnologia. Também em evolução contínua, o React Native já vem há anos sendo uma das tecnologias mais usadas para desenvolvimento mobile, sendo mais antiga que o próprio Flutter. O mantenedor oficial é a Meta (antigo Facebook), que atende bem sua ativa comunidade, inclusive acatando diversas sugestões ao longo de inúmeras atualizações.
Considerações finais
Concluindo, as plataformas têm trilhado caminhos que aprimoram significativamente a experiência de desenvolvimento, respondendo às solicitações da comunidade e simplificando o processo de manutenção de uma base de código única para a criação de aplicativos em diferentes dispositivos. Elas oferecem resultados de alta qualidade, com pouca ou nenhuma diferença perceptível em comparação a aplicativos nativos.
Um aspecto distintivo entre elas é a variedade de plataformas alvo disponíveis. O Flutter se sobressai por oferecer suporte a plataformas que são amplamente utilizadas no dia a dia de muitos usuários, como web e Linux.
No que tange à maturidade, o MAUI está consideravelmente atrás das outras plataformas mencionadas. Lançado oficialmente em maio de 2022, tem visto uma adoção limitada entre os principais desenvolvedores. Embora seja uma evolução do Xamarin e prometa diversas melhorias, a migração requer uma reavaliação completa da estrutura existente.
Quando se trata de encontrar profissionais no mercado, o Flutter destaca-se devido à sua maior disponibilidade, conhecimento e interesse da comunidade. O React Native, que usa JavaScript como linguagem de programação, também é uma escolha popular, pois isso tende a suavizar a curva de aprendizado e atrair muitos desenvolvedores familiarizados com a linguagem.
Coautores: