Motor Hermes JavaScript de código aberto de Facebook

Motor JavaScript lixeiro de código aberto de Facebook Hermes, optimizado para executar aplicacións baseadas no framework Reacciona o nativo na plataforma Android. Apoio Hermes incorporado en React Native a partir da versión 0.60.2 de hoxe. O proxecto está deseñado para resolver problemas con longos tempos de inicio de aplicacións nativas de JavaScript e un importante consumo de recursos. Código escrito por en C++ e distribuído baixo a licenza MIT.

Entre as vantaxes de usar Hermes, hai unha redución do tempo de inicio da aplicación, unha diminución do consumo de memoria e unha redución do tamaño da aplicación. Cando se usa V8, as etapas que máis tempo consumen son as de analizar o código fonte e compilalo sobre a marcha. Hermes leva estes pasos á fase de construción e permite que as aplicacións se entreguen en forma de código de bytes compacto e eficiente.

Para executar directamente a aplicación, utilízase unha máquina virtual desenvolvida dentro do proxecto co recolector de lixo SemiSpace, que distribúe os bloques só segundo sexa necesario (Bajo demanda), admite o movemento e desfragmentación de bloques, devolvendo ao sistema operativo memoria liberada, sen que periódicamente sexa necesario. escaneando o contido de todo o montón.

O procesamento de JavaScript divídese en varias etapas. En primeiro lugar, analízanse os textos fonte e xérase unha representación intermedia do código (Hermes IR), en función da representación S.S.A. (Asignación Única Estática). A continuación, a representación intermedia é procesada nun optimizador, que aplica técnicas de optimización estática directa para transformar o código intermedio primario nunha representación intermedia máis eficiente preservando a semántica orixinal do programa. Na última etapa, xérase o bytecode para a máquina virtual rexistrada.

No motor apoiado por parte do estándar JavaScript ECMAScript 2015 (o obxectivo final é admitilo totalmente) e ofrece compatibilidade coa maioría das aplicacións React Native existentes. Hermes decidiu non admitir a execución local de eval(), con instrucións, reflexión (Reflect e Proxy), API Intl e algunhas marcas en RegExp. Para habilitar Hermes nunha aplicación React Native, só tes que engadir a opción "enableHermes: true" ao proxecto. Tamén é posible construír Hermes en modo CLI, o que lle permite executar ficheiros JavaScript arbitrarios desde a liña de comandos. Un modo de compilación preguiceiro está dispoñible para a depuración, que permite non compilar JavaScript cada vez durante o proceso de desenvolvemento, senón xerar bytecode sobre a marcha xa no dispositivo.

Ao mesmo tempo, Facebook non planea adaptar Hermes para Node.js e outras solucións, centrándose só nas aplicacións móbiles (a compilación AOT en lugar de JIT é máis óptima no contexto dos sistemas móbiles, que teñen memoria RAM limitada e Flash máis lento). Probas de rendemento preliminares realizadas por empregados de Microsoft mostrouseque ao usar Hermes, a aplicación Microsoft Office para Android está dispoñible para o seu uso en 1.1 segundos. despois do inicio e consome 21.5 MB de RAM, mentres que ao usar o motor V8 tarda 1.4 segundos en iniciarse e o consumo de memoria é de 30 MB.

Adición: Facebook publicado resultados das propias probas. Ao usar Hermes coa aplicación MatterMost, o tempo para comezar a dispoñibilidade para o traballo (TTI, Time To Interact) diminuíu de 4.30 a 2.01 segundos, o tamaño do paquete APK reduciuse de 41 a 22 MB e o consumo de memoria de 185 a 136. MB.

Fonte: opennet.ru

Engadir un comentario