Facebook open source Hermes JavaScript-motor

Facebook Open Sources Letvægts JavaScript-motor Hermes, optimeret til at køre applikationer baseret på frameworket Reag indfødte på platformen AndroidStøt Hermes indbygget i React Native startende med dagens udgivelse 0.60.2. Projektet sigter mod at løse problemer med lange opstartstider for native JavaScript-applikationer og betydeligt ressourceforbrug. Kode skrevet skrevet i C++ og distribueret under MIT-licensen.

Fordelene ved at bruge Hermes inkluderer reduceret opstartstid for applikationer, reduceret hukommelsesforbrug og reduceret applikationsstørrelse. Når man bruger V8, er de længste faser kildekodeparsing og on-the-fly-kompilering. Hermes flytter disse faser til byggefasen og tillader, at applikationer leveres i form af kompakt og effektiv bytekode.

Til direkte udførelse af applikationen anvendes en virtuel maskine med SemiSpace-garbage collectoren, der er udviklet i projektet. Maskinen distribuerer kun blokke, når det er nødvendigt (On-demand), understøtter flytning og defragmentering af blokke med returnering af frigjort hukommelse til operativsystemet og undgår periodisk scanning af indholdet af hele heapen.

JavaScript-behandling er opdelt i flere faser. Først parses kildeteksterne, og en mellemliggende repræsentation af koden genereres (Hermes IR), baseret på repræsentationen SSA (Statisk enkelttildeling). Dernæst behandles den mellemliggende repræsentation i optimeringsværktøjet, som anvender prædiktive statiske optimeringsteknikker til at transformere den primære mellemliggende kode til en mere effektiv mellemliggende repræsentation, samtidig med at programmets oprindelige semantik bevares. I det sidste trin genereres bytekode til den virtuelle maskine i registeret.

I motoren støttet af en del af ECMAScript 2015 JavaScript-standarden (med det endelige mål at understøtte den fuldt ud) og sikrer kompatibilitet med de fleste eksisterende React Native-applikationer. Hermes har besluttet ikke at understøtte lokal eval()-udførelse med udtryk, 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. Til fejlfinding er en lazy compilation-tilstand tilgængelig, så du kan generere bytecode på farten på enheden i stedet for at kompilere JavaScript hver gang under udviklingen.

Samtidig planlægger Facebook ikke at tilpasse Hermes til Node.js og andre løsninger, men fokuserer kun på mobilapplikationer (AOT-kompilering i stedet for JIT er mest optimalt i forbindelse med mobile systemer, hvor RAM-størrelsen og langsommere Flash er begrænset). Indledende ydeevnetest udført af Microsoft-medarbejdere. afsløret, at når man bruger Hermes, Microsoft Office-applikationen til Android Den bliver tilgængelig til arbejde 1.1 sekunder efter lanceringen og bruger 21.5 MB RAM, mens den tager 1.4 sekunder at starte og bruger 30 MB hukommelse, når den bruger V8-motoren.

Tillæg: Facebook опубликовал resultater af vores egne tests. Når man bruger Hermes med MatterMost-appen, faldt tiden til at begynde at arbejde (TTI, Time To Interact) fra 4.30 til 2.01 sekunder, APK-pakkestørrelsen faldt fra 41 til 22 MB, og hukommelsesforbruget fra 185 til 136 MB.

Kilde: opennet.ru

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster