POTHIEDU Não Decore a Resposta. Entenda o Caminho

O Que Significa Hermes

O Que Significa Hermes

O motor Hermes no React Native

O Hermes é o motor de JavaScript padrão do React Native desde 2020. Ele foi desenvolvido internamente pelo Facebook specifically para rodar apps React Native com melhor performance de inicialização e menor consumo de memória em comparação ao JavaScriptCore (JSC) que vinha como padrão. O código JS é compilado antecipadamente para bytecode Hermes durante o build, e não mais interpretado sob demanda no dispositivo. Quando você vê o que significa hermes perguntado em fóruns, na maioria das vezes se trata dessa configuração dentro do ecossistema React Native. O Hermes transforma seu bundle JS em um arquivo .hbc (Hermes Bytecode) que roda nativamente no dispositivo. Isso elimina uma fase de compilação JIT (just-in-time) que o JSC fazia a cada abertura do app, e é exatamente esse processo que reduz o tempo de cold start em 20-40% em dispositivos de gama média e baixa. No arquivo android/app/build.gradle, você habilita assim:

project.ext.react = [enableHermes: true] Ao rodar ./gradlew assembleRelease, o Hermes babel plugin compila automaticamente o JS do bundle para bytecode. Você não precisa fazer nada adicional. O arquivo .hbc vai embutido no APK ou AAB. Um detalhe que quase ninguém menciona: o Hermes debugador funciona via protocolo RPC sobre WebSocket em vez de usar V8 Inspector como o JSC usava. Quando estava debugando um problema de memory leak num app de lista pesada, passei duas horas tentando conectar o Chrome DevTools tradicional até perceber que o Hermes exige abrir o DevTools interno do app (Menu Dev -> Debug) ou usar npx react-native start --reset-cache antes de qualquer conexão. Sem o cache limpo, o Hermes às vezes não recompila o bytecode e você fica investigando comportamento de uma versão antiga do código.

Outra coisa contraintuitiva: o Hermes não suporta todas as features do ECMAScript moderno da mesma forma que o V8. Se você usa sintaxe como Optional Chaining ou Nullish Coalescing sem transpilar corretamente no Babel, o Hermes pode falhar silenciosamente durante a compilação do bytecode. Configure seu @babel/preset-env com os targets corretos para iOS e Android, senão o build passa mas o app crasha em execução. Já vi isso acontecer em bundles de 50MB+ que compilavam sem erro algum. Há limitações reais. O Hermes não tem garbage collection mark-and-sweep otimizado para allocadores de alta contenção como o V8, então apps com muita alocação dinâmica de objetos podem sofrer com pausas maiores no GC. Para o ecossistema React Native, isso geralmente não é visível, mas se você está processando vídeos ou dados massivos na thread de JS, o JSC ainda pode ter vantagem em certos cenários. Também não recomendo o Hermes para apps que dependem pesadamente de React Native Web, já que o Hermes não roda no browser. Se o projeto tem estratégia cross-platform com web, mantenha o JSC pelo menos para o build web.

Hermes Logos: Uma Breve História e Significado | Turbologo
Hermes Logos: Uma Breve História e Significado | Turbologo

O Hermes está consolidado como padrão. Desde a versão 0.64 do React Native, ele vem habilitado por default em projetos novos. A menos que tenha um motivo muito específico para reverter, não há razão para desabilitá-lo. A única exceção prática é se seu time ainda não migrou para o novo architecture (Fabric + TurboModules), onde algumas versões antigas do Hermes tinham bugs de thread safety conhecidos que foram corrigidos nas releases posteriores.