Motor JavaScript Hermes de código abierto de Facebook

Motor JavaScript ligero de código abierto de Facebook Hermes, optimizado para ejecutar aplicaciones basadas en el marco Reaccionar nativo en la plataforma Android. Soporte de Hermes incorporado en React Native a partir de la versión 0.60.2 de hoy. El proyecto está diseñado para resolver problemas con tiempos de inicio prolongados para aplicaciones JavaScript nativas y un consumo significativo de recursos. Código esta escrito en C++ y distribuido bajo licencia MIT.

Entre las ventajas de utilizar Hermes, se encuentra una reducción en el tiempo de inicio de la aplicación, una disminución en el consumo de memoria y una reducción en el tamaño de la aplicación. Cuando se utiliza V8, las etapas que consumen más tiempo son las de analizar el código fuente y compilarlo sobre la marcha. Hermes lleva estos pasos a la etapa de construcción y permite que las aplicaciones se entreguen en forma de código de bytes compacto y eficiente.

Para ejecutar directamente la aplicación se utiliza una máquina virtual desarrollada dentro del proyecto con el recolector de basura SemiSpace, que distribuye bloques solo según sea necesario (On-demand), admite el movimiento y desfragmentación de bloques, devolviendo la memoria liberada al sistema operativo, sin periódicamente escaneando el contenido de todo el montón.

El procesamiento de JavaScript se divide en varias etapas. Primero, se analizan los textos fuente y se genera una representación intermedia del código (Hermes IR), basándose en la representación SSA (Asignación única estática). A continuación, la representación intermedia se procesa en un optimizador, que aplica técnicas de optimización estática directa para transformar el código intermedio primario en una representación intermedia más eficiente preservando al mismo tiempo la semántica original del programa. En la última etapa, se genera el código de bytes para la máquina virtual registrada.

en el motor Apoyado por parte del estándar JavaScript ECMAScript 2015 (el objetivo final es admitirlo completamente) y proporciona compatibilidad con la mayoría de las aplicaciones React Native existentes. Hermes ha decidido no admitir la ejecución local de eval(), con declaraciones, reflexión (Reflect y Proxy), API internacional y algunos indicadores en RegExp. Para habilitar Hermes en una aplicación React Native, simplemente agregue la opción "enableHermes: true" al proyecto. También es posible construir Hermes en modo CLI, lo que le permite ejecutar archivos JavaScript arbitrarios desde la línea de comandos. Hay disponible un modo de compilación diferida para la depuración, que le permite no compilar JavaScript cada vez durante el proceso de desarrollo, sino generar código de bytes sobre la marcha que ya está en el dispositivo.

Al mismo tiempo, Facebook no planea adaptar Hermes para Node.js y otras soluciones, centrándose solo en aplicaciones móviles (la compilación AOT en lugar de JIT es más óptima en el contexto de sistemas móviles, que tienen RAM limitada y Flash más lento). Pruebas de rendimiento preliminares realizadas por empleados de Microsoft mostróque al utilizar Hermes, la aplicación Microsoft Office para Android queda disponible para su uso en 1.1 segundos. después del inicio y consume 21.5 MB de RAM, mientras que cuando se utiliza el motor V8 tarda 1.4 segundos en iniciarse y el consumo de memoria es de 30 MB.

Adición: Facebook publicado propios resultados de las pruebas. Al utilizar Hermes con la aplicación MatterMost, el tiempo para iniciar la disponibilidad para el trabajo (TTI, Time To Interact) disminuyó de 4.30 a 2.01 segundos, el tamaño del paquete APK se redujo de 41 a 22 MB y el consumo de memoria de 185 a 136. MEGABYTE.

Fuente: opennet.ru

Añadir un comentario