Um aplicativo escrito inteiramente em react native será muito mais lento que um aplicativo nativo? quais são as diferenças?

Eu escrevi um aplicativo em reagir nativo e ainda obter desempenho nativo. Verificação de saída

Ulangi App

. Não é um aplicativo pequeno. Tem

dois jogos

escrito em JS.

Depende da arquitetura. A maioria dos desenvolvedores usa o Redux para reagir nativamente. Se você otimizá-lo adequadamente (torne seu encadeamento JS menos ocupado), poderá manter o desempenho nativo.

React Native não é "nativo". Mas, novamente, Java ou Swift também não é ...

O React Native usa JavaScriptCore, o mecanismo JavaScript que alimenta o Safari. JavaScriptCore é considerado o mecanismo JavaScript mais rápido para os processadores ARM. É por isso que alguns aplicativos JavaScript são executados mais rapidamente em iPhones do que em computadores desktop.

Quando você desenvolve o React Native e produz um apk para Android, o arquivo zip contém uma cópia do mecanismo JavaScriptCore. O resultado é que seu aplicativo tem um tamanho muito maior que um aplicativo "nativo".

Fora isso, o React Native e outras estruturas de plataforma cruzada, como o Dart Flutter, chamam algumas outras bibliotecas que têm acesso direto às bibliotecas gráficas do telefone. Por exemplo, Flutter usa o Skia

biblioteca, o mesmo usado para o Google Chrome.

mas e o Java? será mais rápido? Os mecanismos JavaScript, como o V8, são criados pelas mesmas pessoas que constroem as máquinas vitrual Java. Seu código nunca é um código de máquina real, é um bytecode executado dentro de uma VM, onde a VM cuida da coleta de lixo. O coletor de lixo adiciona sobrecarga no seu aplicativo, seja Java "nativo" (usa coleta de lixo de rastreamento) ou Swift "nativo" (usa contagem de referência para coleta de lixo).

Então a diferença real será

  • tamanho do aplicativo → o uso de Java ou Swift tornará seu aplicativo muito menor para download, ocupará menos espaço na memória do dispositivo e, em alguns casos, isso leva a um desempenho mais rápido.
  • enorme suporte → o uso de Java ou Swift é mais fácil por causa do ecossistema maduro de centenas ou controles prontos (você não se preocupa com o quão bom o Facebook, o Google ou outros irão emular suas “estruturas de plataforma cruzada” para fazê-las parecer “nativas”
  • melhores ferramentas de depuração → porque, novamente, essas são as ferramentas típicas que todos usam por mais de uma década para desenvolver aplicativos móveis. Pergunte a outros desenvolvedores como eles "debugam" reagem nativamente ...
  • mais camadas: cada estrutura de plataforma cruzada adiciona uma nova camada entre seu aplicativo e seu dispositivo. Algo que já foi resolvido pelos designers do Android e iOS. Seu aplicativo JAVA, por exemplo, já é executado dentro da sandbox da VM, etc. O Google sabe como fazer isso mais rapidamente. E com 1 bilhão de telefones celulares, eles são o rei. Se algo falhar em uma das camadas e "pontes" do React Native para a API nativa, você precisará encontrar suporte dos desenvolvedores do Facebook ou da biblioteca etc. etc. Cada problema que você encontrará provavelmente já foi resolvido anteriormente no Java Mundo Android .. O mesmo para Apple Swift

Se você estiver interessado em uma nova abordagem, os PWAs são JavaScript puro e têm um tamanho de pacote menor, pois não exigem a instalação de um mecanismo com seu aplicativo.

A verdadeira razão para escolher uma dessas estruturas é a linguagem e suas ferramentas. Se você já é proficiente em JavaScript e adora o idioma → escolha React Native. Se você tem muitos anos de experiência em Java → vá para Java nativo, se você é um fã da Apple → vá para Swift, se você é um fã do Google → vá para Dart (desenvolvido pela mesma pessoa que cria o V8 e a Java VM). Se você é um cara de C # → vá para o Xamarin

mas, de qualquer forma, a velocidade não será seu problema ...

Em resumo:

Pode haver algumas pequenas diferenças a favor de um aplicativo nativo, mas há uma grande chance de que isso não importe.

React Native converte componentes JavaScript em visualizações nativas do Android e iOS. Faz isso usando uma ponte especial. Essa ponte é responsável por toda a comunicação entre JavaScript e o código nativo. A ponte também precisa alocar memória extra para funcionar. Isso adiciona uma sobrecarga adicional ao aplicativo.

Lembre-se de que o React Native permite misturar JavaScript com código nativo. Portanto, ao descobrir alguns problemas sérios de desempenho, as partes críticas do aplicativo podem ser convertidas em módulos nativos (usando Swift / Objective-C para iOS e Kotlin / Java para Android). Isso permite obter desempenho nativo puro em locais onde é necessário.

Você pode encontrar isso

estudo de caso comparando o desempenho de um aplicativo iOS nativo com um aplicativo React Native

interessante. O aplicativo nativo alcançou uma taxa de quadros mais alta e alocou menos memória, mas o

diferenças eram insignificantes

. Além disso, o aplicativo RN levou 33% menos tempo para se desenvolver. Ao economizar esse tempo, você pode liberar seu aplicativo mais rapidamente ou gastar tempo extra para melhorar ainda mais o aplicativo. Graças à necessidade de menos desenvolvedores no projeto e a dedicar menos tempo ao desenvolvimento, o aplicativo RN também foi efetivamente mais barato de construir.

As vantagens gerais de desenvolver um aplicativo usando o React Native são:

  • menor tempo de desenvolvimento,
  • compartilhamento de código entre plataformas,
  • uma equipe menor (portanto, mais fácil de gerenciar),
  • recarga a quente (um recurso muito conveniente para desenvolvedores),
  • a possibilidade de envolver desenvolvedores de front-end familiarizados com o React.

Por outro lado, o desenvolvimento de dois aplicativos nativos separados também tem algumas vantagens:

  • uma sensação mais "nativa" do aplicativo,
  • melhor desempenho em alguns casos extremos,
  • a maturidade das plataformas e maior disponibilidade de bibliotecas e ferramentas estáveis.

O fator mais importante a ser levado em consideração ao decidir sobre uma tecnologia a ser usada é o escopo do projeto. Para aplicativos muito complexos e com uso intenso de dados com integrações nativas não tão diretas,

O React Native pode não ser o melhor ajuste ainda.

Mas, para a maioria dos projetos com desempenho satisfatório, isso não deve ser um problema.

Um aplicativo React Native bem escrito pode ser indistinguível de um aplicativo nativo bem escrito.

Mas

depende.

Alguns tipos de cálculos com muitos dados podem ser mais lentos no JavaScript. Mas provavelmente 95% dos aplicativos nunca faria algo assim.

Alguns tipos de acesso à rede podem realmente ser

Mais rápido

do JavaScript, se eles forem bem projetados.

Mas JavaScript mal escrito é

levemente

provavelmente mais lento que o código nativo mal escrito. Então, se seus desenvolvedores são

borderline,

então você pode estar

levemente

melhor gastar quase o dobro para desenvolver

dois aplicativos nativos

.

Eu prefiro contratar desenvolvedores fortes, no entanto.