Motor Hermes JavaScript de codi obert de Facebook

Motor JavaScript lleuger de codi obert de Facebook Hermes, optimitzat per executar aplicacions basades en el framework Reacciona els nadius a la plataforma Android. Suport Hermes incorporat a React Native a partir de la versió 0.60.2 d'avui. El projecte està dissenyat per resoldre problemes amb temps d'inici llargs per a aplicacions JavaScript natives i un consum significatiu de recursos. Codi escrit per en C++ i distribuït sota la llicència MIT.

Entre els avantatges d'utilitzar Hermes, hi ha una reducció del temps d'inici de l'aplicació, una disminució del consum de memòria i una reducció de la mida de l'aplicació. Quan s'utilitza V8, les etapes que consumeixen més temps són les etapes d'anàlisi del codi font i compilació sobre la marxa. Hermes porta aquests passos a l'etapa de construcció i permet que les aplicacions es lliuren en forma de codi de bytes compacte i eficient.

Per executar directament l'aplicació, s'utilitza una màquina virtual desenvolupada dins del projecte amb el col·lector d'escombraries SemiSpace, que distribueix blocs només segons sigui necessari (a demanda), admet el moviment i la desfragmentació de blocs, retornant la memòria alliberada al sistema operatiu, sense periòdicament. escanejant el contingut de tot el munt.

El processament de JavaScript es divideix en diverses etapes. En primer lloc, s'analitza els textos font i es genera una representació intermèdia del codi (Hermes IR), basat en la representació S.S.A. (Assignació única estàtica). A continuació, la representació intermèdia es processa en un optimitzador, que aplica tècniques d'optimització estàtica cap endavant per transformar el codi intermedi primari en una representació intermèdia més eficient tot preservant la semàntica original del programa. En l'última etapa, es genera el bytecode per a la màquina virtual registrada.

En el motor recolzat per forma part de l'estàndard JavaScript ECMAScript 2015 (l'objectiu final és donar-li suport totalment) i proporciona compatibilitat amb la majoria d'aplicacions React Native existents. Hermes ha decidit no donar suport a l'execució local d'eval(), amb declaracions, reflexió (Reflect i Proxy), API Intl i alguns indicadors a RegExp. Per habilitar Hermes en una aplicació React Native, només cal que afegiu l'opció "enableHermes: true" al projecte. També és possible construir Hermes en mode CLI, que us permet executar fitxers JavaScript arbitraris des de la línia d'ordres. Hi ha disponible un mode de compilació mandrosa per a la depuració, que us permet no compilar JavaScript cada vegada durant el procés de desenvolupament, sinó generar bytecode sobre la marxa ja al dispositiu.

Al mateix temps, Facebook no té previst adaptar Hermes per a Node.js i altres solucions, centrant-se només en aplicacions mòbils (la compilació AOT en lloc de JIT és més òptima en el context dels sistemes mòbils, que tenen RAM limitada i Flash més lent). Proves de rendiment preliminars realitzades pels empleats de Microsoft revelatque quan s'utilitza Hermes, l'aplicació Microsoft Office per a Android està disponible per al seu ús en 1.1 segons. després de l'inici i consumeix 21.5 MB de memòria RAM, mentre que quan s'utilitza el motor V8 triga 1.4 segons a arrencar i el consum de memòria és de 30 MB.

Addició: Facebook publicat resultats de la prova pròpia. Quan s'utilitzava Hermes amb l'aplicació MatterMost, el temps per iniciar la disponibilitat per al treball (TTI, Time To Interact) va disminuir de 4.30 a 2.01 segons, la mida del paquet APK es va reduir de 41 a 22 MB i el consum de memòria de 185 a 136. MB.

Font: opennet.ru

Afegeix comentari