Facebook open source Hermes JavaScript-motor

Facebook letvægts JavaScript-motor med åben kildekode Hermes, optimeret til at køre applikationer baseret på rammerne Reag indfødte på Android-platformen. Hermes støtte indbygget i React Native starter med dagens 0.60.2-udgivelse. Projektet er designet til at løse problemer med lange opstartstider for native JavaScript-applikationer og betydeligt ressourceforbrug. Kode skrevet i C++ og distribueret under MIT-licensen.

Blandt fordelene ved at bruge Hermes er der en reduktion i applikationens opstartstid, et fald i hukommelsesforbruget og en reduktion i applikationsstørrelsen. Når du bruger V8, er de mest tidskrævende faser faserne med at parse kildekoden og kompilere den på farten. Hermes bringer disse trin til byggestadiet og gør det muligt at levere applikationer i form af kompakt og effektiv bytekode.

For direkte at eksekvere applikationen bruges en virtuel maskine udviklet inden for projektet med SemiSpace garbage collector, som kun distribuerer blokke efter behov (On-demand), understøtter flytning og defragmentering af blokke, returnerer frigjort hukommelse til operativsystemet uden periodisk scanning af indholdet af hele bunken.

JavaScript-behandling er opdelt i flere faser. Først parses kildeteksterne, og der genereres en mellemrepræsentation af koden (Hermes IR), baseret på repræsentationen SSA (Statisk enkeltopgave). Dernæst behandles den mellemliggende repræsentation i en optimizer, som anvender fremadgående statiske optimeringsteknikker for at transformere den primære mellemliggende kode til en mere effektiv mellemrepræsentation, samtidig med at programmets oprindelige semantik bevares. På det sidste trin genereres bytekoden for den registrerede virtuelle maskine.

I motoren støttet af del af ECMAScript 2015 JavaScript-standarden (det ultimative mål er fuldt ud at understøtte den) og giver kompatibilitet med de fleste eksisterende React Native-applikationer. Hermes har besluttet ikke at understøtte lokal eksekvering af eval(), med sætninger, refleksion (Reflect og Proxy), Intl API og nogle flag i RegExp. For at aktivere Hermes i en React Native-applikation skal du blot tilføje "enableHermes: true"-indstillingen til projektet. Det er også muligt at bygge Hermes i CLI-tilstand, så du kan udføre vilkårlige JavaScript-filer fra kommandolinjen. En doven kompileringstilstand er tilgængelig til debugging, som giver dig mulighed for ikke at kompilere JavaScript hver gang under udviklingsprocessen, men at generere bytekode i farten allerede på enheden.

Samtidig planlægger Facebook ikke at tilpasse Hermes til Node.js og andre løsninger, idet der kun fokuseres på mobile applikationer (AOT-kompilering i stedet for JIT er mest optimal i forbindelse med mobilsystemer, som har begrænset RAM og langsommere Flash). Foreløbig præstationstest udført af Microsoft-medarbejdere afsløretat ved brug af Hermes bliver Microsoft Office-applikationen til Android tilgængelig til brug på 1.1 sekunder. efter opstart og bruger 21.5 MB RAM, mens det ved brug af V8-motoren tager 1.4 sekunder at starte og hukommelsesforbruget er 30 MB.

Tilføjelse: Facebook опубликовал egne testresultater. Ved brug af Hermes med MatterMost-applikationen faldt tiden til at starte tilgængelighed for arbejde (TTI, Time To Interact) fra 4.30 til 2.01 sekunder, størrelsen på APK-pakken blev reduceret fra 41 til 22 MB og hukommelsesforbruget fra 185 til 136 MB.

Kilde: opennet.ru

Tilføj en kommentar