Facebook je otvorio izvorni kod za lagani Hermes JavaScript motor, optimizovan za pokretanje aplikacija zasnovanih na React Native framework-u na Android platformi.
Facebook softver inženjer Marc Horowitz otkrio je novi JavaScript motor na konferenciji Chain React 2019 u Portlandu u Oregonu. Hermes je novi alat za programere koji se fokusira na poboljšanje performansi pokretanja aplikacija na isti način na koji to Facebook već čini za svoje aplikacije i stvaranje aplikacija efikasnijim na početnim pametnim telefonima.
O Hermesu
Podrška za Hermes ugrađena je u React Native od današnje verzije 0.60.2. Projekt je prepoznat po rješavanju problema s dugim vremenima pokretanja izvornih JavaScript aplikacija i značajnom potrošnjom resursa. Kôd je napisan na C ++ i distribuiran pod MIT licencom.
Od prednosti upotrebe Hermesa, smanjuje se vrijeme početka aplikacije, smanjenje potrošnje memorije i smanjenje veličine aplikacije.
Ubrzanje aplikacija lansiranje postiže se korištenjem pretkompilacije u bajt kodu kompaktan i efikasan u fazi sastavljanja.
Za izravno pokretanje aplikacije koristi se virtualna mašina sa SemiSpace sakupljačem smeća razvijenim kao dio projekta. Kod V8 najduži su koraci za raščlanjivanje izvornog koda i njegovo trenutno kompajliranje.
Hermesov mehanizam vodi ove faze do faze kompajliranja i omogućava isporuku aplikacija u obliku optimiziranog bajt koda.
Obrada JavaScript-a podijeljena je u nekoliko faza. U početku se izvorni kod raščlanjuje i generira se posredni prikaz koda (Hermes IR), zasnovan na SSA predstavljanju (Static Unique Assignment).
Pored toga, posredni prikaz se obrađuje u optimizatoru, koji koristi proaktivne tehnike statičke optimizacije za pretvaranje primarnog međukoda u učinkovitiji posrednički prikaz, uz očuvanje semantike izvornog programa.
Konačno, u posljednjoj fazi generira se bajt kôd za registriranu virtualnu mašinu.
U demonstraciji, Marc Horowitz pokazao je da React Native aplikacija s Hermesom u potpunosti se učitao oko dvije sekunde brže od iste aplikacije koja se učitavala bez Hermesa.
Marc Horowitz pobrinuo se da Hermes također smanji veličinu APK-a do sredine React Native pohranjene aplikacije od 41 MB i eliminirala je četvrtinu upotrebe memorije aplikacije.
Drugim riječima, s Hermesom programeri mogu navesti korisnike da brže komuniciraju s aplikacijom s manje prepreka, kao što su sporo vrijeme preuzimanja i ograničenja uzrokovana višestrukim aplikacijama koje dijele ograničene resurse memorije, kao što su: Pogotovo na unosu telefona.
Motor podržava dio ECMAScript 2015 JavaScript standarda (krajnja je podrška potpuna podrška) i kompatibilan je s većinom postojećih React Native aplikacija. U Hermesu je odlučeno da se ne podržava lokalno lijevanje evala (), "sa" izrazima, refleksijama (Reflect i Proxy), API-jem Intl API i nekim zastavicama u RegExp-u.
Da biste omogućili Hermes u React Native aplikaciji, jednostavno dodajte opciju "enableHermes: true" u projekt. Također je moguće kompajlirati Hermes u načinu CLI sučelja, što vam omogućuje izvršavanje proizvoljnih JavaScript datoteka iz naredbenog retka.
Istovremeno, Facebook ne planira prilagoditi Hermes za Node.js i druga rješenja, fokusirajući se samo na mobilne aplikacije (kompajliranje AOT-a umjesto JIT-a je optimalnije u kontekstu mobilnih aplikacija zasnovanih na React Native-u).
Microsoft je izvršio preliminarne testove performansi i pokazao da je prilikom upotrebe Hermesa aplikacija Microsoft Office za Android dostupna za rad u 1.1 sekundi.
Nakon lansiranja i troši 21.5 MB RAM-a, dok se koristi V8 motor, na pokretanje se troši 1.4 sekunde, a potrošnja memorije je 30 MB.