Facebook open source Hermes JavaScript motor

Facebookov lagani JavaScript mehanizam otvorenog koda Hermes, optimiziran za pokretanje aplikacija temeljenih na okviru Reagirajte Native na Android platformi. Hermes podrška ugrađeni u React Native počevši od današnjeg izdanja 0.60.2. Projekt je osmišljen za rješavanje problema s dugim vremenom pokretanja izvornih JavaScript aplikacija i značajnom potrošnjom resursa. Kodirati napisao u C++ i distribuiran pod MIT licencom.

Prednosti korištenja Hermesa uključuju smanjenje vremena pokretanja aplikacije, smanjenje potrošnje memorije i smanjenje veličine aplikacije. Kada koristite V8, faze koje oduzimaju najviše vremena su faze raščlanjivanja izvornog koda i kompajliranja u hodu. Hermes donosi ove korake u fazu izgradnje i omogućuje isporuku aplikacija u obliku kompaktnog i učinkovitog bajt koda.

Za izravno izvođenje aplikacije koristi se virtualni stroj razvijen u okviru projekta sa SemiSpace garbage collectorom koji distribuira blokove samo po potrebi (On-demand), podržava premještanje i defragmentaciju blokova, vraća oslobođenu memoriju operativnom sustavu, bez periodičkog skeniranje sadržaja cijele hrpe.

JavaScript obrada je podijeljena u nekoliko faza. Prvo se izvorni tekstovi analiziraju i generira međureprezentacija koda (Hermes IR), na temelju reprezentacije SSA (Statični pojedinačni zadatak). Zatim se intermedijarni prikaz obrađuje u optimizatoru, koji primjenjuje napredne statičke tehnike optimizacije za transformaciju primarnog posrednog koda u učinkovitiji posredni prikaz uz očuvanje izvorne semantike programa. U posljednjoj fazi generira se bajt kod za registrirani virtualni stroj.

U motoru podržan od dio standarda ECMAScript 2015 JavaScript (krajnji cilj je njegova potpuna podrška) i pruža kompatibilnost s većinom postojećih React Native aplikacija. Hermes je odlučio ne podržati lokalno izvršavanje eval(), s izjavama, refleksijom (Reflect i Proxy), Intl API i nekim oznakama u RegExp. Da biste omogućili Hermes u React Native aplikaciji, samo dodajte opciju “enableHermes: true” projektu. Također je moguće izgraditi Hermes u CLI modu, što vam omogućuje izvršavanje proizvoljnih JavaScript datoteka iz naredbenog retka. Lijeni način kompilacije dostupan je za otklanjanje pogrešaka, što vam omogućuje da ne kompilirate JavaScript svaki put tijekom procesa razvoja, već da generirate bajt kod u hodu već na uređaju.

Istodobno, Facebook ne planira prilagoditi Hermes za Node.js i druga rješenja, fokusirajući se samo na mobilne aplikacije (AOT kompilacija umjesto JIT-a je najoptimalnija u kontekstu mobilnih sustava, koji imaju ograničen RAM i sporiji Flash). Preliminarno testiranje performansi koje su proveli Microsoftovi zaposlenici objavida korištenjem Hermesa Microsoft Office aplikacija za Android postaje dostupna za korištenje za 1.1 sekundu. nakon pokretanja i troši 21.5MB RAM-a, dok kod korištenja V8 motora treba mu 1.4 sekunde za pokretanje i potrošnja memorije je 30MB.

Dodatak: Facebook objavljen vlastite rezultate testiranja. Pri korištenju Hermesa s aplikacijom MatterMost vrijeme početka dostupnosti za rad (TTI, Time To Interact) smanjeno je s 4.30 na 2.01 sekundu, veličina APK paketa smanjena je s 41 na 22 MB, a potrošnja memorije sa 185 na 136 MB.

Izvor: opennet.ru

Dodajte komentar