Mecanismo JavaScript Hermes de código aberto do Facebook

Mecanismo JavaScript leve e de código aberto do Facebook Hermes, otimizado para executar aplicativos baseados no framework Reagir Nativo na plataforma Android. Suporte Hermes construídas em no React Native começando com a versão 0.60.2 de hoje. O projeto foi desenvolvido para resolver problemas com longos tempos de inicialização para aplicativos JavaScript nativos e consumo significativo de recursos. Código está escrito em C++ e distribuído sob a licença do MIT.

Entre as vantagens de usar o Hermes estão a redução do tempo de inicialização dos aplicativos, a diminuição do consumo de memória e a redução do tamanho dos aplicativos. Ao usar o V8, os estágios mais demorados são os estágios de análise do código-fonte e compilação imediata. Hermes traz essas etapas para o estágio de construção e permite que os aplicativos sejam entregues na forma de bytecode compacto e eficiente.

Para executar diretamente a aplicação, é utilizada uma máquina virtual desenvolvida dentro do projeto com o coletor de lixo SemiSpace, que distribui blocos apenas quando necessário (On-demand), suporta movimentação e desfragmentação de blocos, devolvendo a memória liberada ao sistema operacional, sem periodicamente verificando o conteúdo de todo o heap.

O processamento de JavaScript é dividido em várias etapas. Primeiro, os textos fonte são analisados ​​e uma representação intermediária do código é gerada (Hermes IR), com base na representação SSA (Atribuição única estática). Em seguida, a representação intermediária é processada em um otimizador, que aplica técnicas de otimização estática direta para transformar o código intermediário primário em uma representação intermediária mais eficiente, preservando a semântica original do programa. Na última etapa, é gerado o bytecode da máquina virtual cadastrada.

No motor apoiado por faz parte do padrão JavaScript ECMAScript 2015 (o objetivo final é suportá-lo totalmente) e fornece compatibilidade com a maioria dos aplicativos React Native existentes. Hermes decidiu não suportar a execução local de eval(), com instruções, reflexão (Reflect e Proxy), API Intl e alguns sinalizadores em RegExp. Para habilitar o Hermes em uma aplicação React Native, basta adicionar a opção “enableHermes: true” ao projeto. Também é possível construir o Hermes no modo CLI, permitindo executar arquivos JavaScript arbitrários a partir da linha de comando. Um modo de compilação lenta está disponível para depuração, o que permite não compilar JavaScript todas as vezes durante o processo de desenvolvimento, mas gerar bytecode dinamicamente já no dispositivo.

Ao mesmo tempo, o Facebook não planeja adaptar o Hermes para Node.js e outras soluções, concentrando-se apenas em aplicativos móveis (a compilação AOT em vez de JIT é mais ideal no contexto de sistemas móveis, que têm RAM limitada e Flash mais lento). Testes preliminares de desempenho realizados por funcionários da Microsoft mostrouque ao usar o Hermes, o aplicativo Microsoft Office para Android fica disponível para uso em 1.1 segundos. após a inicialização e consome 21.5 MB de RAM, enquanto ao usar o motor V8 leva 1.4 segundos para iniciar e o consumo de memória é de 30 MB.

Adição: Facebook опубликовал próprios resultados de testes. Ao usar o Hermes com o aplicativo MatterMost, o tempo para iniciar a disponibilidade para o trabalho (TTI, Time To Interact) diminuiu de 4.30 para 2.01 segundos, o tamanho do pacote APK foi reduzido de 41 para 22 MB e o consumo de memória de 185 para 136 MB.

Fonte: opennet.ru

Adicionar um comentário