Facebook åpen kildekode Hermes JavaScript-motor

Facebook lettvekts JavaScript-motor med åpen kildekode Hermes, optimalisert for å kjøre applikasjoner basert på rammeverket Reager Native på Android-plattformen. Hermes støtte innebygd i React Native fra og med dagens 0.60.2-utgivelse. Prosjektet er designet for å løse problemer med lange oppstartstider for native JavaScript-applikasjoner og betydelig ressursforbruk. Kode skrevet av i C++ og distribuert under MIT-lisensen.

Blant fordelene med å bruke Hermes er det en reduksjon i oppstartstid for applikasjoner, en reduksjon i minneforbruk og en reduksjon i applikasjonsstørrelse. Når du bruker V8, er de mest tidkrevende stadiene trinnene med å analysere kildekoden og kompilere den på farten. Hermes bringer disse trinnene til byggestadiet og lar applikasjoner leveres i form av kompakt og effektiv bytekode.

For å utføre applikasjonen direkte, brukes en virtuell maskin utviklet i prosjektet med SemiSpace søppelsamleren, som distribuerer blokker kun etter behov (On-demand), støtter flytting og defragmentering av blokker, returnerer frigjort minne til operativsystemet, uten periodisk skanner innholdet i hele haugen.

JavaScript-behandling er delt inn i flere stadier. Først analyseres kildetekstene og en mellomrepresentasjon av koden genereres (Hermes IR), basert på representasjonen SSA (Statisk enkeltoppdrag). Deretter behandles mellomrepresentasjonen i en optimizer, som bruker fremadgående statiske optimeringsteknikker for å transformere den primære mellomliggende koden til en mer effektiv mellomrepresentasjon samtidig som den opprinnelige semantikken til programmet bevares. På siste trinn genereres bytekoden for den registrerte virtuelle maskinen.

I motoren støttet av del av ECMAScript 2015 JavaScript-standarden (det endelige målet er å støtte den fullt ut) og gir kompatibilitet med de fleste eksisterende React Native-applikasjoner. Hermes har bestemt seg for ikke å støtte lokal utførelse av eval(), med uttalelser, refleksjon (Reflect og Proxy), Intl API og noen flagg i RegExp. For å aktivere Hermes i en React Native-applikasjon, legg til alternativet "enableHermes: true" til prosjektet. Det er også mulig å bygge Hermes i CLI-modus, slik at du kan kjøre vilkårlige JavaScript-filer fra kommandolinjen. En lat kompileringsmodus er tilgjengelig for feilsøking, som lar deg ikke kompilere JavaScript hver gang under utviklingsprosessen, men å generere bytekode i farten allerede på enheten.

Samtidig planlegger ikke Facebook å tilpasse Hermes for Node.js og andre løsninger, og fokuserer kun på mobilapplikasjoner (AOT-kompilering i stedet for JIT er mest optimalt i sammenheng med mobilsystemer, som har begrenset RAM og tregere Flash). Foreløpig ytelsestesting utført av Microsoft-ansatte avslørtat når du bruker Hermes, blir Microsoft Office-applikasjonen for Android tilgjengelig for bruk på 1.1 sekunder. etter oppstart og bruker 21.5 MB RAM, mens ved bruk av V8-motoren tar det 1.4 sekunder å starte og minneforbruket er 30 MB.

Tillegg: Facebook publisert egne testresultater. Når du bruker Hermes med MatterMost-applikasjonen, ble tiden for å starte tilgjengelighet for arbeid (TTI, Time To Interact) redusert fra 4.30 til 2.01 sekunder, størrelsen på APK-pakken ble redusert fra 41 til 22 MB, og minneforbruket fra 185 til 136 MB.

Kilde: opennet.ru

Legg til en kommentar