Facebooks Hermes JavaScript-motor med öppen källkod

Facebook lättvikts JavaScript-motor med öppen källkod Hermes, optimerad för att köra applikationer baserat på ramverket React native på Android-plattformen. Hermes stöd inbyggt i React Native från och med dagens version 0.60.2. Projektet är utformat för att lösa problem med långa starttider för inbyggda JavaScript-applikationer och betydande resursförbrukning. Koda skriven i C++ och distribueras under MIT-licensen.

Bland fördelarna med att använda Hermes är det en minskning av applikationens starttid, en minskning av minnesförbrukningen och en minskning av applikationsstorleken. När du använder V8 är de mest tidskrävande stegen stegen att analysera källkoden och kompilera den i farten. Hermes tar dessa steg till byggstadiet och låter applikationer levereras i form av kompakt och effektiv bytekod.

För att direkt köra applikationen används en virtuell maskin som utvecklats inom projektet med SemiSpace garbage collector, som distribuerar block endast efter behov (on-demand), stöder flyttning och defragmentering av block, återför frigjort minne till operativsystemet, utan periodisk skanna innehållet i hela högen.

JavaScript-behandling är uppdelad i flera steg. Först analyseras källtexterna och en mellanrepresentation av koden genereras (Hermes IR), baserat på representationen SSA (Static Single Assignment). Därefter bearbetas den mellanliggande representationen i en optimerare, som tillämpar framåtriktade statiska optimeringstekniker för att transformera den primära mellanliggande koden till en mer effektiv mellanrepresentation samtidigt som programmets ursprungliga semantik bevaras. I det sista steget genereras bytekoden för den registrerade virtuella maskinen.

I motorn stöds av en del av ECMAScript 2015 JavaScript-standarden (det slutliga målet är att stödja den fullt ut) och ger kompatibilitet med de flesta befintliga React Native-applikationer. Hermes har beslutat att inte stödja lokal exekvering av eval(), med uttalanden, reflektion (Reflect och Proxy), Intl API och några flaggor i RegExp. För att aktivera Hermes i en React Native-applikation, lägg bara till alternativet "enableHermes: true" i projektet. Det är också möjligt att bygga Hermes i CLI-läge, så att du kan köra godtyckliga JavaScript-filer från kommandoraden. Ett lat kompileringsläge är tillgängligt för felsökning, vilket gör att du inte kan kompilera JavaScript varje gång under utvecklingsprocessen, utan att generera bytekod i farten redan på enheten.

Samtidigt planerar inte Facebook att anpassa Hermes för Node.js och andra lösningar, med fokus enbart på mobilapplikationer (AOT-kompilering istället för JIT är mest optimalt i sammanhanget med mobila system, som har begränsat RAM-minne och långsammare Flash). Preliminär prestandatestning utförd av Microsoft-anställda avslöjadeatt när du använder Hermes blir Microsoft Office-applikationen för Android tillgänglig för användning på 1.1 sekunder. efter uppstart och förbrukar 21.5 MB RAM, medan det vid användning av V8-motorn tar 1.4 sekunder att starta och minnesförbrukningen är 30 MB.

Tillägg: Facebook publicerade egna testresultat. När du använder Hermes med MatterMost-applikationen minskade tiden för att starta tillgängligheten för arbete (TTI, Time To Interact) från 4.30 till 2.01 sekunder, storleken på APK-paketet minskades från 41 till 22 MB och minnesförbrukningen från 185 till 136 MB.

Källa: opennet.ru

Lägg en kommentar